在蒙戈

问题描述:

查询嵌套列表存在我有蒙戈的文件是通过以下方式构成:在蒙戈

{ 
    "_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}}) 

但我相信,这将只返回文档的首元素戏剧数组中包含非空点击列表。

有关我如何完成此任务的任何想法?

由于

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

保存列表作为单独的属性(例如num_plays)的大小。然后你就可以查询文件,其中num_plays大于0

+0

我能做到这一点。从阅读的角度来看,这可能允许最快的查询。 – Ben 2011-12-21 19:07:23

没有测试过,但我想你想查询是

{ "plays.clicks" : { "$size" : 0 } } 

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size

+0

是的,如果我想返回列表大小为0的所有文档,那就没问题了。不幸的是,我想要反过来,这似乎不可能。 – Ben 2011-12-21 19:04:25