Как вы "присоединяетесь" к массиву в мангусте (mongodb) с помощью node.js?

58
6

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


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


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


Итак, как это достигается с мангустом и node.js?

спросил(а) 2011-07-27T08:17:00+04:00 9 лет, 3 месяца назад
1
Решение
58

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


 console.log(messages);

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

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

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

ответил(а) 2011-07-27T10:35:00+04:00 9 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема