我在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子文档中会有多少属性,并且可能会不时更改
答案 0 :(得分:1)
要查找仅包含一个查询的第二个文档,您需要使用$exists运算符。
您的查询将如下所示:
db.params.find({'params.groupBy': 'days', 'params.country': 'A', 'params.city': {$exists: false}})