2014-04-09 100 views
1

H的MongoDB的$ elemMatch,

我試圖更新此對象的版本場,但我不能夠進行查詢與2嵌套的$匹配。所以我想要做的是獲得記錄文件ID 12和版本1.

我會問是否它是一個很好的做法有更多的一個嵌套數組在mongoDB(像這個對象)...

查詢:

db.collection.find({"my_uuid":"434343"},{"item":{$elemMatch:{"file_id":12,"changes":{$elemMatch:{"version":1}}}}}).pretty() 

對象:

{ 
    "my_uuid": "434343", 
    "item": [ 
    { 
     "file_id": 12, 
     "no_of_versions" : 1, 
     "changes": [ 
     { 
      "version": 1, 
      "commentIds": [ 
      4, 
      5, 
      7 
      ] 
     }, 
     { 
      "version": 2, 
      "commentIds": [ 
      10, 
      11, 
      15 
      ] 
     } 
     ] 
    }, 
    { 
     "file_id": 234, 
     "unseen_comments": 3, 
     "no_of_versions" : 2, 
     "changes": [ 
     { 
      "version": 1, 
      "commentIds": [ 
      100, 
      110, 
      150 
      ] 
     } 
     ] 
    } 
    ] 
} 

謝謝

+0

這是一個非常難回答的問題,我們不知道您的模式或查詢等的上下文等 – Sammaye

回答

0

若y ou想要滿足結果中返回的標準的所有文檔,那麼我認爲它很好。但是,如果您想將itemchanges的陣列內容限制爲匹配元素,則可能會出現問題。這是因爲,您必須在投影中使用$ positional運算符來限制數組的內容,並且只有一個這樣的運算符可以出現在投影中。所以,你將無法限制文檔中多個數組的內容。