0

我在 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'}

但此查询同时查找第一个和第二个文档。

那么我怎样才能找到只有一个查询的第二个文档呢?

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

4

1 回答 1

1

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

您的查询将如下所示:

db.params.find({'params.groupBy': 'days', 'params.country': 'A', 'params.city': {$exists: false}})
于 2013-08-22T12:48:38.270 回答