MongoDB精确的子文档查询

时间:2013-08-22 08:38:41

标签: mongodb mongodb-query

我在mongoDB中有以下文档

{ "_id" : ObjectId("5215c622f8b2bae39d82b54c"), "params" : { "groupBy" : "days", "country" : "A", "city" : "b" } }
{ "_id" : ObjectId("5215c62df8b2bae39d82b54d"), "params" : { "groupBy" : "days", "country" : "A" } }
{ "_id" : ObjectId("5215c643f8b2bae39d82b54e"), "params" : { "groupBy" : "days" } }

我尝试使用此查询找到第一个文档

{params : {groupBy : 'days', country : 'A', 'city' : 'b'}} 

好的,没问题,有效。 我们来试试吧

{params : {groupBy : 'days', city : 'b', country : 'A'}}

这个并不令人惊讶。 好的,现在我知道订单很重要。

我知道如果我想忽略属性的顺序,我可以这样做来搜索第一个文档。

{ 'params.groupBy' : 'days' , 'params.city' : 'b', 'params.country' : 'A' }

现在考虑我想找到第二个文档,我之前不知道属性的顺序。 所以我要做的是

{'params.groupBy' : 'days' ,  'params.country' : 'A'}

但是此查询同时找到第1和第2个文档。

那么如何只用一个查询找到第二个文档呢?

编辑: 还有一个条件是我不确定未来params子文档中会有多少属性,并且可能会不时更改

1 个答案:

答案 0 :(得分:1)

要查找仅包含一个查询的第二个文档,您需要使用$exists运算符。

您的查询将如下所示:

db.params.find({'params.groupBy': 'days', 'params.country': 'A', 'params.city': {$exists: false}})
相关问题