Ich habe versucht, Mongoose zu verwenden, um die Liste aller Benutzer wie folgt zu senden:
server.get('/usersList', function(req, res) {
var users = {};
User.find({}, function (err, user) {
users[user._id] = user;
});
res.send(users);
});
Natürlich wird res.send(users);
{}
senden, was ich nicht will. Gibt es eine find
-Alternative mit etwas anderer Semantik, bei der ich Folgendes tun könnte?
server.get('/usersList', function(req, res) {
User.find({}, function (err, users) {
res.send(users);
});
});
Grundsätzlich möchte ich, dass der Rückruf nur ausgeführt wird, wenn alle Benutzer aus der Datenbank abgerufen wurden.
Wenn Sie wirklich ein Mapping von _id
nach user
zurückgeben möchten, können Sie immer Folgendes tun:
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()
gibt alle übereinstimmenden Dokumente in einem Array zurück, so dass Ihr zuletzt abgeschnittener Code dieses Array an den Client sendet.
Wenn Sie die Daten an eine Ansicht senden möchten, geben Sie Folgendes ein.
server.get('/usersList', function(req, res) {
User.find({}, function(err, users) {
res.render('/usersList', {users: users});
});
});
Innerhalb Ihrer Ansicht können Sie die Daten mit den variablen Benutzern durchlaufen
Es war sehr einfach, Ihre Daten aufzulisten:
server.get('/userlist' , function (req , res) {
User.find({}).then(function (users) {
res.send(users);
});
});
Dies ist nur eine Verbesserung der Antwort von @soulcheck und ein Tippfehler in forEach (fehlende schließende Klammer).
server.get('/usersList', function(req, res) {
User.find({}, function(err, users) {
res.send(users.reduce(function(userMap, item) {
userMap[item.id] = item;
return userMap;
}, {}));
});
});
prost!
Das Gleiche kann mit der Async-Warten- und Pfeil-Funktion gemacht werden
server.get('/usersList', async (req, res) => {
const users = await User.find({});
const userMap = {};
users.forEach((user) => {
userMap[user._id] = user;
});
res.send(userMap);
});
Falls wir list all documents in Mongoose collection
nach update
oder delete
wollen
Wir können die Funktion wie folgt bearbeiten:
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.');
});
};
Dies wird list all documents
bei Erfolg statt nur showing success message