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

从本质上讲,我希望只有当所有的用户都从数据库中获取callback才能被执行。

那么,如果你真的想要返回一个从_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); }); }); 

find()返回一个数组中的所有匹配文档,所以你最后的代码被剪切后发送给客户端。

如果你想发送数据到一个视图通过以下。

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

在您的视图内,您可以使用variables用户循环访问数据

这只是对@soulcheck答案的改进,并修正了forEach中的错字(缺less右括号);

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

干杯!