Как сделать «соединение» с массивом в mongoose (mongodb) с помощью node.js? - PullRequest
1 голос
/ 27 июля 2011

Как сделать «соединение» (я знаю, что это неправильный термин) с массивом сообщений в мангусте?

Я пытался перебирать все сообщения и запрашивать информацию о пользователе, ноон не работает:

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?

1 Ответ

1 голос
/ 27 июля 2011

Самая большая проблема с вашим кодом состоит в том, что вы предполагаете, что код выполняется синхронно, но это не так. он работает асинхронно. поэтому сообщения еще не настроены при выполнении

 console.log(messages);

сделайте что-то вроде этого:

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

редактировать да я вижу. Вы хотите добавить userInfo к различным сообщениям. Самый простой способ добиться этого - использовать модуль 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);
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...