2016-03-27 3 views
0

私は種類のユーザーのコレクションを持っています -node.jsからmongodbクエリをネストする方法は?

{ 
"_id" : ObjectId("56f60e4eea8af4670408483e"), 
"twitterHandle" : "shrutip", 
"firstName" : "Shruti", 
"lastName" : "Patil", 
"emailID" : "[email protected]", 
"password" : "91382451347786e9b8f2f3817b27a2adfec1880c", 
"phoneNumber" : "98739458789", 
"location" : "San Jose", 
"birthYear" : 1992, 
"birthMonth" : 1, 
"birthDay" : 10, 
"followers" : [ 
    "abhayp", 
    "anupd", 
    "lubdhal", 
    "poojag", 
    "prashantb", 
    "pratiksanglikar", 
    "shaileshyedge", 
    "shrutip" 
], 
"following" : [ 
    "abhinavk", 
    "anupd", 
    "hiteshn", 
    "lubdhal", 
    "omkarn", 
    "poojag", 
    "pratiksanglikar", 
    "shaileshyedge", 
    "shrutip" 
], 
"tweets" : [ 
    { 
     "tweet_id" : "3c50e98cf0c2298f40f98a013cd4a18a1443b7ac", 
     "tweet_text" : "At BJP youth wing meet, seniors worry over #JNU controversy, and not #RamTemple.", 
     "createdOn" : ISODate("2016-03-07T23:37:27Z"), 
     "tags" : [ 
      "JNU", 
      "RamTemple" 
      ] 
     } 
    ] 
} 

私は、任意のユーザーのためのフィードを(ユーザーのすべてのツイートが与えられたユーザーが日付の昇順に追従している)を作成します。特定のユーザーがフォローしているユーザーの一覧が表示されますが、見つかったユーザーのツイートを見つける必要があります。 node.jsでどうすればいいですか?これらのクエリをネストする方法は?私はこれまで何をやったか
が下に表示される - 2番目のクエリを実行する前に何とか

var cursor = MongoDB.collection("users").find({ 
    "twitterHandle": twitterHandle 
}); 
cursor.each(function(err, doc) { 
    assert.equal(err, null); 
    if (doc != null) { 
     var followingCursor = MongoDB.collection("users").find({ twitterHandle: { $in: doc.following } }); 
     followingCursor.each(function (err, following) { 
      if(following != null) { 
       feed.push(following.tweets); 
      } 
     }); 
     promise.resolve(feed); 
    } 
}); 

しかし、約束は解決されます。 約束を返す前に、followingCursor.eachのすべての反復が実行されるようにするにはどうすればよいですか?

答えて

0

最終的に私は自分自身で答えを見つけました。

if (doc != null) { 
    var followingCursor = MongoDB.collection("users").find({ twitterHandle: { $in: doc.following } }); 
    followingCursor.each(function (err, following) { 
     if(following != null) { 
      feed.push(following.tweets); 
     } 
    }); 
    promise.resolve(feed); 
} 

上記のコードでは、following != nullの条件が満たされていないと約束されています。 明らかにMongoDBドライバは、カーソルの終わりの値がnullのときに返します。正しいコードは次のとおりです。 -

if (doc != null) { 
     var followingCursor = MongoDB.collection("users").find({ twitterHandle: { $in: doc.following } }); 
     followingCursor.each(function (err, following) { 
      if(following != null) { 
       feed = feed.concat(following.tweets); 
      } else { 
       promise.resolve(feed); 
      } 
     }); 
    } 
関連する問題