2017-02-03 67 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"} 
        ] 
       } 
      ] 
     } 
    ], 
}, 

]

我想檢查是否有由「用戶1」的職位與文本「測試1」的註釋。我曾經嘗試這樣做,到目前爲止,但它不工作:

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

編輯:

問題是,當我搜索「測試1」我得到的結果,當我搜索「測試2」我也得到了一個結果。但是我只想要一個結果,當文本「test1」的帖子有一個「User1」的評論。所以我想檢查一個文本X的帖子是否有人評論Y.

什麼是正確的解決方案?

謝謝!

+0

你能分辨出哪部分是不工作?您是否有預期的輸出結果? – Veeram

+0

@Veeram是的!我編輯過它。 – user6586661

回答

1

問題是評論是一個數組。所以theme.posts.comments沒有一個名爲username的屬性。而theme.posts.comments [0]有一個名爲username的屬性。

一個解決辦法是讓文本的所有結果:「測試1」,然後使用JavaScript功能的indexOf在陣列result.comments,看看對象{用戶名:「用戶1」}在數組中存在。

這將是這個樣子:

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