Mongoose:获取完整的用户列表

Ran*_*lue 81 javascript mongoose mongodb node.js

我试图使用Mongoose发送所有用户的列表,如下所示:

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

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

    res.send(users);
});
Run Code Online (Sandbox Code Playgroud)

当然,res.send(users);要发送{},这不是我想要的.有没有一种find语义略有不同的替代方案,我可以做以下事情?

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

本质上,我希望只有在从数据库中提取所有用户时才执行回调.

sou*_*eck 148

好吧,如果你真的想从返回映射_iduser,你总是可以这样做:

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

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

    res.send(userMap);  
  });
});
Run Code Online (Sandbox Code Playgroud)

find() 返回数组中的所有匹配文档,因此您的最后一个代码剪切将该数组发送到客户端.


bst*_*ory 12

如果您想将数据发送到视图,请传递以下内容.

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

在视图中,您可以使用变量用户循环访问数据


Eva*_*n P 8

这只是对@soulcheck答案的改进,并解决了forEach中的拼写错误(缺少结束括号);

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

干杯!


yas*_*sin 7

有一种非常简单的方法可以列出您的数据:

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


vit*_*aji 5

使用 async wait 和 arrow 函数也可以完成相同的操作

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

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

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

res.send(userMap);

});
Run Code Online (Sandbox Code Playgroud)