我在Mongo中有一个文档,其结构如下:
{
"_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}})
但我相信这只会返回play数组中第一个元素包含非空单击列表的文档。
有关如何完成这项任务的想法吗?
由于
答案 0 :(得分:8)
db.collection.find({plays.clicks.0: {$exists:true}})
是正确的语法,但是plays
是一个列表,查询将匹配在plays
中点击的任何文档。没有办法以这种方式为子元素检索数组的子集[1]。有一个子/虚拟馆藏票[2]
答案 1 :(得分:3)
将列表的大小另存为单独的属性(例如num_plays
)。然后,您可以查询num_plays
大于0
的文档:
答案 2 :(得分:0)
尚未测试,但我认为您想要的查询是
{ "plays.clicks" : { "$size" : 0 } }
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size