使用带有ID数组的mongoose查询mongodb的最佳方法是什么?

时间:2017-11-02 05:23:55

标签: node.js mongodb mongoose async.js

我使用mongoose查询一个集合(消息)。结果是一系列文档。每个文档都包含不同集合(用户)的ID。现在我想从messages集合中查询每个ID的users集合。 我们的想法是使用用户集合中的信息更新每个消息对象,然后再将其返回到前端。 我尝试使用async.each。由于某种原因,即使我确保在每次迭代后调用callback()函数,也不会调用final函数。

app.get('/getmsg', function(req, res){

 messages.find({query})
 .exec(function(err, ms){
  if(err) throw err;
  async.each(ms, function(m, callback){
   users.findOne({_id : m.userId})
    .lean()
    .exec(function(err, user){
      if(err) {
       console.log('error' , err);
       callback();
      } else {
      m.userName = user.name;

// everything is working up to here

     callback();
    }
  }), function(err){
      res.send(ms);  // this is never returned!
     }
 });
});

});

有没有更好的方法来实现这一目标?我认为这一定是个常见问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

您无法使用res.send。而是创建一个函数来获得有关它的通知。这样的事情。

// 1st para in async.each() is the array of items
async.each(items,
// 2nd param is the function that each item is passed to
function(item, callback){
// Call an asynchronous function, often a save() to DB
item.someAsyncCall(function (){
  // Async call is done, alert via callback
  callback();
});
},
// 3rd param is the function to call when everything's done
function(err){
// All tasks are done now
doSomethingOnceAllAreDone();
}
);