MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment faire une jointure sur un tableau dans mongoose (mongodb) avec node.js ?

le plus gros problème avec votre code est que vous supposez que le code s'exécute de manière synchrone - mais ce n'est pas le cas. il s'exécute de manière asynchrone. donc les messages ne sont pas encore définis lorsque vous exécutez

 console.log(messages);

faites quelque chose comme ça à la place :

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

modifier OK je vois. vous souhaitez ajouter les informations utilisateur aux différents messages. Le moyen le plus simple d'y parvenir est d'utiliser le module async :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);
  });
}