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 find
alternatif 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.
javascript
node.js
mongodb
mongoose
Randomblue
sumber
sumber
Jawaban:
Nah, jika Anda benar-benar ingin mengembalikan pemetaan dari
_id
keuser
, 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.sumber
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
sumber
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!
sumber
/userList
rute Anda akan menerima objek JSON dengan format:{"123451": {...user 123451}, "123452": {...user 123452} }
Ada cara yang sangat mudah untuk membuat daftar data Anda:
server.get('/userlist' , function (req , res) { User.find({}).then(function (users) { res.send(users); }); });
sumber
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); });
sumber
Jika kita ingin
list all documents in Mongoose collection
setelahupdate
ataudelete
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 documents
berhasil, bukan hanyashowing success message
sumber
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); } }); }
sumber
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 }) })
sumber