你如何做一个“连接”在一个数组与mongoose(mongodb)node.js?

你怎么做一个“join”(我知道这不是一个正确的术语)与mongoose的消息数组?

我试着循环所有的消息和查询获取用户信息,但它不工作:

messages.forEach(function (message, index) { User.findById(message.userId, function (err, user) { messages[index].user = user }) }) console.log(messages) // the user info is not attatched 

那么mongoose和node.js如何实现呢?

你的代码最大的问题是,你认为代码是同步运行的 – 但事实并非如此。 它asynchronous运行。 所以执行时还没有设置消息

  console.log(messages); 

做这样的事情,而不是:

 var userIds = [id1, id2, id3]; User.find({"_id": {$in: userIds}}, function (err, users) { console.log(users); }); 

编辑好吧,我明白了。 你想添加userInfo到不同的消息。 获得这个最简单的方法是使用asynchronous模块: https : //github.com/caolan/async

 async.map(messages, getUserInfo, function (err, result) { if (err) { console.log(err); return; } // log all msg with userinfo console.log(result); }); function getUserInfo (msg, callback) { User.findById(msg.userId, function (err, user) { if (err) { callback(err); return; } msg.user = user; callback(null, msg); }); }