MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie führen Sie mit node.js einen Join für ein Array in Mongoose (mongodb) durch?

Das größte Problem mit Ihrem Code ist, dass Sie davon ausgehen, dass der Code synchron läuft - aber das ist nicht der Fall. es läuft asynchron. Meldungen sind also noch nicht gesetzt, wenn Sie

ausführen
 console.log(messages);

mach stattdessen so etwas:

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

bearbeiten OK, ich verstehe. Sie möchten die Benutzerinfo zu den verschiedenen Nachrichten hinzufügen. Der einfachste Weg, dies zu erreichen, ist die Verwendung des async-Moduls: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);
  });
}