2011-12-20 141 views
6

查詢嵌套列表存在我有蒙戈的文件是通過以下方式構成:在蒙戈

{ 
    "_id" : ObjectId("4eea7237d0ba3a04f20008fb"), 
    "code" : "b2677c2809c844cc9d7e3e4ff8d95b46", 
    "city_id" : 4, 
    "datetime" : ISODate("2011-12-13T18:41:44.062Z"), 
    "plays" : [  
     { 
      "play_id" : 717224, 
      "clicks" : [ ], 
      "order" : 1, 
      "mysql_id" : 145 
     } 

我想查詢文檔,其plays.clicks屬性是一個非空列表。我試過存在沒有運氣。我認爲,這樣的事情可能工作:

db.collection.find({plays.clicks.0: {$exists:true}}) 

但我相信,這將只返回文檔的首元素戲劇數組中包含非空點擊列表。

有關我如何完成此任務的任何想法?

由於

回答

7

db.collection.find({plays.clicks.0: {$exists:true}})

是正確的語法,但是plays是查詢將匹配的列表任何文檔已點擊plays。以這種方式無法爲子元素檢索數組的子集[1]。沒有爲子/虛擬館藏票[2]

[1] http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-RetrievingaSubrangeofArrayElements

[2] https://jira.mongodb.org/browse/SERVER-828

+0

感謝羅斯,這可能是最好的答案(儘管額外的非規範化建議是一個合理的選擇)。 – Ben 2011-12-21 19:06:00

3

保存列表作爲單獨的屬性(例如num_plays)的大小。然後你就可以查詢文件,其中num_plays大於0

+0

我能做到這一點。從閱讀的角度來看,這可能允許最快的查詢。 – Ben 2011-12-21 19:07:23