Javascript Node.js:异步嵌套回调在for循环的每个迭代中都不起作用

Javascript Node.js:异步嵌套回调在for循环的每个迭代中都不起作用,javascript,node.js,mongodb,asynchronous,express,Javascript,Node.js,Mongodb,Asynchronous,Express,我使用以下代码片段获取存储在mongodb中的特定用户的追随者 保存的用户json如下所示 { "_id":{ "$oid":"5440f606255cd4740e88ed21" }, "username":"test2", "email":"test2%40gmail.com", "name":"Test2", "version":null, "password":"2ea01e7a318f15378641f47469613ce6817cc91a", "

我使用以下代码片段获取存储在mongodb中的特定用户的追随者

保存的用户json如下所示

{   "_id":{
    "$oid":"5440f606255cd4740e88ed21"   },   "username":"test2",   "email":"test2%40gmail.com",   "name":"Test2",   "version":null,   "password":"2ea01e7a318f15378641f47469613ce6817cc91a",   "gender":null,   "dob":null,   "profile_image":"1413543430090.jpg",   "status":"1",   "role_id":"2",   "posts":[
       ],   "followers":[
    {
      "_id":{
        "$oid":"5440fb8fad74e87c0fdf22e5"
      },
      "user_id":"5440f0c3ae7a24ac0e47ca9e",
      "unfollow":"0",
      "created":{
        "$date":"2014-10-17T11:20:47.107Z"
      }
    },
    {
      "_id":{
        "$oid":"5440fc1e51a684e00b72db8a"
      },
      "user_id":"5440f9790dd5d4a40b6cec18",
      "unfollow":0,
      "created":{
        "$date":"2014-10-17T11:23:10.645Z"
      }
    }   ] }
为了获得用户的所有关注者,我使用了以下代码段。在此代码中,跟随者使用foreach循环获取

主要问题是foreach循环中的find查询由于异步回调函数而无法工作

  db.collection('users').findOne({'_id': new mongo.ObjectID('5440f606255cd4740e88ed21'), "followers.unfollow": '0'}, {followers: 1, _id: 1}, function(err, user) {

     var followers = user.followers;
     var finalarray = [];
        followers.forEach(function(follower, index) {


db.collection('users').find({"user._id": new mongo.ObjectID(follower._id)}, {_id: 1, username: 1, profile_picture: 1},function(err, users) {
                                if (user) {
                                    var temp_follower = [];
                                    temp_follower = {'follower_id': user._id, 'username': user.username,'profile_picture': user.profile_picture};
                                    finalarray.push(temp_follower);
                                }
                            });
                        });

    });

res.json({'replyCode': "success", 'replyMsg': "followers get successfully", 'followers': finalarray});
最后,在回复JSON时,我没有找到任何关注者用户详细信息

帮我解决这个问题

谢谢


Dinesh Prajapati

您可以使用$in操作符而不是循环。下面是一个示例代码框架

    db.collection('users').findOne({'_id': new mongo.ObjectID('5440f606255cd4740e88ed21'), "followers.unfollow": '0'}, {followers: 1, _id: 1}, function(err, user) {

    db.collection('users').find({"user._id":{$in: user.followers }, {_id: 1, username: 1, profile_picture: 1},function(err, users) {
                res.json({'replyCode': "success", 'replyMsg': "followers get successfully", 'followers': users});
            }
    });
});
请注意,要执行类似sql连接的操作,可能必须使用mapReduce之类的工具。你可以参考这个。

find{user.\u-id:对我来说似乎是一个输入错误。我认为你的第二个请求不会因此返回任何内容。