gpt4 book ai didi

javascript - 如何使用node.js在mongoose(mongodb)中的数组上执行 "join"?

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:40 24 4
gpt4 key购买 nike

如何在 Mongoose 中对消息数组进行“连接”(我知道这不是正确的术语)?

我尝试循环所有消息并查询以获取用户信息,但它不起作用:

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 是如何实现这一点的呢?

最佳答案

您的代码最大的问题是,您假设代码同步运行 - 但事实并非如此。它异步运行。所以当你执行时消息还没有设置

 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);
});
}

关于javascript - 如何使用node.js在mongoose(mongodb)中的数组上执行 "join"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6839727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com