Подтвердить что ты не робот

Mongoose: Получить полный список пользователей

Я попытался использовать Mongoose для отправки списка всех пользователей следующим образом:

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

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

    res.send(users);
});

Конечно, res.send(users); собирается отправить {}, чего я не хочу. Есть ли альтернатива find с немного другой семантикой, где я мог бы сделать следующее?

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

По сути, я хочу, чтобы обратный вызов выполнялся только тогда, когда все пользователи были извлечены из базы данных.

4b9b3361

Ответ 1

Ну, если вы действительно хотите вернуть отображение от _id до user, вы всегда можете сделать:

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() возвращает все сопоставимые документы в массиве, поэтому ваш последний код отпирается отправляет этот массив клиенту.

Ответ 2

Если вы хотите отправить данные в окно просмотра, выполните следующие действия.

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

Внутри вашего представления вы можете прокручивать данные с помощью переменных пользователей

Ответ 3

Это просто улучшение ответа @soulcheck и исправление опечатки в forEach (отсутствует закрывающая скобка);

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

ура!

Ответ 4

Был очень простой способ перечислить ваши данные:

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

Ответ 5

То же самое можно сделать с помощью функции асинхронного ожидания и стрелки

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

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

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

res.send(userMap);

});

Ответ 6

В случае, если мы хотим list all documents in Mongoose collection после update или delete

Мы можем отредактировать функцию примерно так:

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

Это будет list all documents об успехе, а не просто showing success message