我遇到了范围界定问题。首先,我正在搜索当前用户,一旦找到他或她的对象,我就访问他们的朋友数组。在该朋友数组中,存储了每个朋友的用户名。然后,我尝试在该朋友数组上执行 forEach 循环,并尝试将每个找到的朋友对象添加到名为 FriendsObjArr 的数组中。当我与一位朋友一起测试它以及最后一个 else 语句中的 res.json 语句时,它起作用了。然而我需要它在循环之外,所以每个朋友都会被推动。问题是,循环结束后,数组中的数据也消失了。这是我的代码:
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 的聚合管道来帮助您查找和分组用户,而不是自己进行循环。每次迭代对象和查询数据库时,您的 js 代码可能会出现性能问题。
db.users.aggregate([
{
$match: {
"userId": "Charlie"
}
},
{
"$unwind": "$friends"
},
{
"$lookup": {
"from": "users",
"localField": "friends",
"foreignField": "username",
"as": "foundFriend"
}
},
{
"$unwind": "$foundFriend"
},
{
$group: {
_id: null,
friendsObjArr: {
"$addToSet": "$foundFriend"
}
}
}
])
这里有一个 MongoDB Playground 供您参考。