web-dev-qa-db-fra.com

Mongoose: Obtenir la liste complète des utilisateurs

J'ai essayé d'utiliser Mongoose pour envoyer la liste de tous les utilisateurs comme suit:

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

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

    res.send(users);
});

Bien sûr, res.send(users); va envoyer {}, ce qui n’est pas ce que je veux. Existe-t-il une alternative find avec une sémantique légèrement différente, où je pourrais faire ce qui suit?

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

En gros, je veux que le rappel ne soit exécuté que lorsque tous les utilisateurs ont été extraits de la base de données.

66
Randomblue

Eh bien, si vous voulez vraiment renvoyer un mappage de _id à user, vous pouvez toujours faire:

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() renvoie tous les documents correspondants dans un tableau. Votre dernier code extrait envoie donc ce tableau au client.

122
soulcheck

Si vous souhaitez envoyer les données à une vue, transmettez ce qui suit: 

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

Dans votre vue, vous pouvez parcourir les données à l’aide des utilisateurs variables.

11
bstory

Il y avait un moyen très simple de lister vos données:

server.get('/userlist' , function (req , res) {
 User.find({}).then(function (users) {
 res.send(users);
 });
});
7
yasin

Ceci est juste une amélioration de la réponse de @soulcheck, et la correction de la faute de frappe dans forEach (crochet de fermeture manquant);

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

à votre santé!

7
Evan P

Même chose avec l'attente asynchrone et la fonction flèche

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

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

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

res.send(userMap);

});
1
vithu shaji

Si nous voulons list all documents in Mongoose collection après update ou delete

Nous pouvons éditer la fonction à quelque chose comme ça:

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.');
        });
    };

Ce sera list all documents en cas de succès au lieu de showing success message

0
Abdallah Okasha