Node.js 如何将MongoDB对象推入全局数组而不覆盖它?
我有一个范围问题。首先,我正在搜索当前用户,一旦找到他或她的对象,我将访问他们的朋友数组。在该friends数组中,存储每个朋友的用户名。然后,我尝试在friends数组上执行forEach循环,并尝试将找到的每个friend对象添加到名为friendsObjArr的数组中。当我用一个friend和最后一个else语句中的res.json语句测试它时,它是有效的。但是我需要它在循环之外,所以每个朋友都会被推。问题是,循环结束后,数组中的数据也消失了。这是我的密码:Node.js 如何将MongoDB对象推入全局数组而不覆盖它?,node.js,arrays,mongodb,scope,mongodb-query,Node.js,Arrays,Mongodb,Scope,Mongodb Query,我有一个范围问题。首先,我正在搜索当前用户,一旦找到他或她的对象,我将访问他们的朋友数组。在该friends数组中,存储每个朋友的用户名。然后,我尝试在friends数组上执行forEach循环,并尝试将找到的每个friend对象添加到名为friendsObjArr的数组中。当我用一个friend和最后一个else语句中的res.json语句测试它时,它是有效的。但是我需要它在循环之外,所以每个朋友都会被推。问题是,循环结束后,数组中的数据也消失了。这是我的密码: function getFri
function getFriends(req, res){
const username = req.params.userId
let friendsObjArr = []
User.findOne({username: username}, (err, foundUser) => {
if (err){
console.log(err);
}
else {
foundUser.friends.forEach(friend => {
User.findOne({username: friend}, (err, foundFriend) =>{
if (err){
console.log(err);
}
else{
console.log(foundFriend);
friendsObjArr.push(foundFriend)
}
})
});
res.json(friendsObjArr)
}
})
}
我建议您利用MongoDB的聚合管道来帮助您查找和分组用户,而不是自己进行循环。每次迭代对象和查询db时,js代码中可能会出现性能问题
这是一个供您参考的数组。数组中的数据没有消失。当它到达
res.json(friendsObjArr)
时,它从未真正进入过那里。为什么?这仅仅是因为User.findOne
在您的forEach
中以异步调用的形式存在,并且需要这样处理。你需要利用承诺来完成这件事。您使用的是mongoose还是本机nodejs驱动程序?