2017-02-03 4 views
0

私は、このコレクションがあります。MongoDBのクエリは

[ 
{ 
    username : "User1", 
    theme : [ 
     { 
      name : "Theme1", 
      posts : [ 
       { 
        text : "test1", 
        postdate : 1, 
        comments : [ 
         {username: "User1"} 
        ] 
       }, 
       { 
        text : "test2", 
        postdate : 2, 
        comments : [ 
         {username: "User2"} 
        ] 
       }, 
       { 
        text : "test3", 
        postdate : 3, 
        comments : [ 
         {username: "User3"} 
        ] 
       } 
      ] 
     } 
    ], 
}, 

]

をそして私は、テキスト「TEST1」とのポストのための「ユーザー1」によって、コメントがあるかどうかを確認したいです。私はこれまでのところ、これを試してみましたが、それは動作しません:

db.user.find({ "theme.posts.text" : "test1" , "theme.posts.comments.username" : "User1"}); 

EDIT:

問題は、私は「TEST1」を検索したときに、私は「TEST2」を検索したとき、私は結果を得ると、あります私も結果を得る。しかし、 "test1"というテキストの投稿に "User1"のコメントがある場合にのみ結果が必要です。だから、テキストXの投稿に人Yのコメントがあるかどうかチェックしたい。

正しい解決策は何ですか?

ありがとうございました!

+0

あなたが動作していないどの部分伝えることができます:それは次のようになります

?後に期待される出力がありますか? – Veeram

+0

@Veeramはい!私はそれを編集しました。 – user6586661

答えて

1

問題はコメントが配列であることです。したがって、theme.posts.commentsにはusernameというプロパティはありません。むしろtheme.posts.comments [0]にはusernameというプロパティがあります。

「test1」のテキストを含むすべての結果を取得し、result.commentsの配列のjavascript関数indexOfを使用して、オブジェクト{userName: 'User1'}が配列内に存在するかどうかを確認することです。

db.user.findOne({ "theme.posts.text" : "test1"},function(err,result){ 
     if(result.comments.indexOf({userName:'user1'}) !==-1){ 
       console.log("this post has a comment by user1"); 
} 
     else{ 
     console.log("this post does not have a comment by user1"); 
} 


}); 
+0

さて、ありがとう!そして、 "test1"の投稿のコメント[]を取得する最良の方法は何ですか?私はJavaのすべての配列を調べたくないからです。 – user6586661

+0

コードがどのように表示されるかを編集しました。 –

+0

問題は、私がfindOneを使うときに私はドキュメント全体を取得することです。つまり、私はすべてのコメントですべての投稿を取得します。この特定の投稿のコメントを取得する方法はありませんか? – user6586661