Mongoose: Dapatkan daftar lengkap pengguna

102

Saya telah mencoba menggunakan Mongoose untuk mengirim daftar semua pengguna sebagai berikut:

server.get('/usersList', function(req, res) {
    var users = {};

    User.find({}, function (err, user) {
        users[user._id] = user;
    });

    res.send(users);
});

Tentu saja, res.send(users);akan mengirim {}, yang bukan itu yang saya inginkan. Apakah ada findalternatif dengan semantik yang sedikit berbeda, di mana saya dapat melakukan hal berikut?

server.get('/usersList', function(req, res) {    
    User.find({}, function (err, users) {
        res.send(users);
    });
});

Pada dasarnya, saya ingin callback dijalankan hanya jika semua pengguna telah diambil dari database.

Randomblue
sumber
bagaimana cara mengaksesnya dalam tampilan?
Saani

Jawaban:

177

Nah, jika Anda benar-benar ingin mengembalikan pemetaan dari _idke user, Anda selalu dapat melakukan:

server.get('/usersList', function(req, res) {
  User.find({}, function(err, users) {
    var userMap = {};

    users.forEach(function(user) {
      userMap[user._id] = user;
    });

    res.send(userMap);  
  });
});

find() mengembalikan semua dokumen yang cocok dalam satu larik, sehingga kode terakhir Anda yang dipotong mengirimkan larik itu ke klien.

pemeriksaan jiwa
sumber
bagaimana cara mengaksesnya dalam tampilan?
Saani
13

Jika Anda ingin mengirim data ke tampilan, teruskan berikut ini.

    server.get('/usersList', function(req, res) {
        User.find({}, function(err, users) {
           res.render('/usersList', {users: users});
        });
    });

Di dalam tampilan Anda, Anda dapat memutar melalui data menggunakan variabel pengguna

bstory.dll
sumber
9

Ini hanyalah Peningkatan dari jawaban @soulcheck, dan perbaikan kesalahan ketik di forEach (kurung tutup tidak ada);

    server.get('/usersList', (req, res) => 
        User.find({}, (err, users) => 
            res.send(users.reduce((userMap, item) => {
                userMap[item.id] = item
                return userMap
            }, {}));
        );
    );

Bersulang!

Evan P.
sumber
bagaimana cara mengaksesnya dalam tampilan?
Saani
1
menjelaskan? Apa yang ingin kamu lakukan?
Evan P
@Saani ketika Anda mengakses /userListrute Anda akan menerima objek JSON dengan format:{"123451": {...user 123451}, "123452": {...user 123452} }
Maxwell sc
8

Ada cara yang sangat mudah untuk membuat daftar data Anda:

server.get('/userlist' , function (req , res) {
 User.find({}).then(function (users) {
 res.send(users);
 });
});
Yasin Hajilou
sumber
4

Hal yang sama dapat dilakukan dengan fungsi async await dan panah

server.get('/usersList', async (req, res) => {

const users = await User.find({});

const userMap = {};
users.forEach((user) => {
    userMap[user._id] = user;
});

res.send(userMap);

});
vithu shaji
sumber
1

Jika kita ingin list all documents in Mongoose collectionsetelah updateataudelete

Kita bisa mengedit fungsinya menjadi seperti ini:

exports.product_update = function (req, res, next) {
        Product.findByIdAndUpdate(req.params.id, {$set: req.body}, function (err, product) {
            if (err) return next(err);
            Product.find({}).then(function (products) {
                res.send(products);
                });
            //res.send('Product udpated.');
        });
    };

Ini akan list all documentsberhasil, bukan hanyashowing success message

Abdallah Okasha
sumber
1

Untuk membuat fungsi menunggu daftar diambil.

getArrayOfData() {
    return DataModel.find({}).then(function (storedDataArray) {
        return storedDataArray;
    }).catch(function(err){
        if (err) {
            throw new Error(err.message);
        }
    });
}
gprathour.dll
sumber
0

Solusi Saya

User.find()
        .exec()
        .then(users => {
            const response = {
                count: users.length,
                users: users.map(user => {

                    return {
                        _id: user._id,
                        // other property
                    }

                })

            };
            res.status(200).json(response);
        }).catch(err => {
        console.log(err);
        res.status(500).json({
            success: false
        })
    })
mendengkur
sumber