Node.js 如何将MongoDB对象推入全局数组而不覆盖它?

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

我有一个范围问题。首先,我正在搜索当前用户,一旦找到他或她的对象,我将访问他们的朋友数组。在该friends数组中,存储每个朋友的用户名。然后,我尝试在friends数组上执行forEach循环,并尝试将找到的每个friend对象添加到名为friendsObjArr的数组中。当我用一个friend和最后一个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的聚合管道来帮助您查找和分组用户,而不是自己进行循环。每次迭代对象和查询db时,js代码中可能会出现性能问题


这是一个供您参考的数组。

数组中的数据没有消失。当它到达
res.json(friendsObjArr)
时,它从未真正进入过那里。为什么?这仅仅是因为
User.findOne
在您的
forEach
中以异步调用的形式存在,并且需要这样处理。你需要利用承诺来完成这件事。您使用的是mongoose还是本机nodejs驱动程序?