2016-07-19 7 views
1

誰かが私に次のコードを実行すると空リストを取得する理由を説明できますか?mongooseクエリの出力を説明してください

Post.find({ "emailPublisher": req.body.emailUser }, { _id: 0, "idPost": 1 }, function (err, idsposts) { 
    console.log(idsposts) 
    for (i in idsposts) { list.push(idsposts[i].idPost) } 
}); 
console.log("list is " + list); 

これは、この行のように思える:

console.log("list is " + list); 

は、検索クエリの前に発生します。

答えて

1

あなたは、コールバックにそれを挿入する必要があります。

Post.find({ "emailPublisher": req.body.emailUser }, { _id: 0, "idPost": 1 }, function (err, idsposts) { 
    console.log(idsposts) 
    for (i in idsposts) { list.push(idsposts[i].idPost) } 
    console.log("list is " + list); 
}); 

検索は非同期操作です。

+0

ありがとうございます!あなたは次の質問で助けてくれますか? –

0

なぜこのクエリは機能しませんか?

Like.aggregate({ $group: { _id: "$idPost", totalNumLikes: { $sum: 1 } } }, function (err, likesResult) { 
    if (err) { 
     console.log("error in app.post(numlikesforUser)") 
     return res.send(err); 
    } 
    Post.find({idPost: {$in: likesResult.map(r => r._id)}, "emailPublisher": req.body.emailUser }, function (err, posts) { 
    for (var i =0; i < likesResult.length; i++) { 
     var result = likesResult[i]; 
     var post = posts.filter(p => p._id === result._id)[0]; 
     if (post != null) { 
       likesCount = likesCount + result.totalNumLikes 
      } 
     } 
    console.log("likescount is:::::::::::::" + likesCount); 
    }); 
}); 
+0

同じこと。ログはfindOneコールバック内にあるはずです –

+0

しかし、それはすべての反復の前になります。私は最後の反復の後に答えが欲しい。 –

+1

申し訳ありませんがループを参照してください。ループはここでは正しくありません。すべての投稿を 'Post.find({idPost:{$ in:likesResult.map(r => r._id)} ... 'と一緒に持ってきてループなどで処理する必要があります –

関連する問題