sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo se une a una matriz en mongoose (mongodb) con node.js?

el mayor problema con su código es que asume que el código se ejecuta sincrónicamente, pero no es así. se ejecuta de forma asíncrona. por lo tanto, los mensajes aún no están configurados cuando ejecuta

 console.log(messages);

haz algo como esto en su lugar:

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

editar OK veo. desea agregar la información de usuario a los diferentes mensajes. La forma más fácil de lograrlo es usar el módulo asíncrono: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);
  });
}