Mungo: Vollständige Liste der Benutzer abrufen

95

Ich habe versucht, mit Mongoose 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 res.send(users);wird senden {}, was ich nicht will. Gibt es eine findAlternative 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);
    });
});

Im Wesentlichen möchte ich, dass der Rückruf nur ausgeführt wird, wenn alle Benutzer aus der Datenbank abgerufen wurden.

Zufälliges Blau
quelle
Wie kann ich in der Ansicht darauf zugreifen?
Saani

Antworten:

169

Wenn Sie wirklich ein Mapping von _idbis zurückgeben möchten user, 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, sodass Ihr zuletzt abgeschnittener Code dieses Array an den Client sendet.

Soulcheck
quelle
Wie kann ich in der Ansicht darauf zugreifen?
Saani
12

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

In Ihrer Ansicht können Sie die Daten mithilfe der variablen Benutzer durchlaufen

Geschichte
quelle
9

Dies ist nur eine Verbesserung der Antwort von @soulcheck und eine Korrektur des Tippfehlers in forEach (fehlende schließende Klammer).

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

Prost!

Evan P.
quelle
Wie kann ich in der Ansicht darauf zugreifen?
Saani
1
erklären? Was möchten Sie tun?
Evan P
@ Saani Wenn Sie auf die /userListRoute zugreifen , erhalten Sie ein JSON-Objekt mit dem Format:{"123451": {...user 123451}, "123452": {...user 123452} }
Maxwell sc
8

Es gab eine sehr einfache Möglichkeit, Ihre Daten aufzulisten:

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

Gleiches kann mit asynchroner Warte- und Pfeilfunktion erfolgen

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
quelle
1

Für den Fall, dass wir list all documents in Mongoose collectionnach updateoder wollendelete

Wir können die Funktion folgendermaßen 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 documentsauf Erfolg statt nurshowing success message

Abdallah Okasha
quelle
1

Damit die Funktion darauf wartet, dass die Liste abgerufen wird.

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

Meine Lösung

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
        })
    })
kzncrda
quelle