我有一个包含两个文档的集合:
{
"type":"s",
"disp":[
{
"quantity":1,
"date":20141109
},
{
"quantity":1,
"date":20141110
}
]
},
{
"type":"d",
"disp":[
{
"quantity":1,
"date":20141109
},
{
"quantity":0,
"date":20141110
}
]
}
我必须进行查询(带有一个或多个日期)来检索所有给定日期的数量大于0的文档。
因此,如果我搜索日期20141109,那么我必须检索两者,但搜索20141110或两个日期20141109和20141110应仅返回类型" s"因为它是每个用作参数的日期数量大于0的唯一
P.S。对不起我的英语,它不是我的第一语言
答案 0 :(得分:2)
要为一个日期执行此类匹配,请使用$elemMatch
:
db.test.find({ "disp" : { "$elemMatch" : { "quantity" : { "$gt" : 0 }, "date" : 20141109} } })
对于多个日期,您需要使用$and
db.test.find({ "$and" : [
{ "disp" : { "$elemMatch" : { "quantity" : { "$gt" : 0 }, "date" : 20141109 } } },
{ "disp" : { "$elemMatch" : { "quantity" : { "$gt" : 0 }, "date" : 20141110 } } }
] })