当字段不存在时如何使用mongo $或with

时间:2016-08-24 23:11:04

标签: mongodb mongodb-query

我需要查找其中一个字段具有特定值或不存在的文档。我有一个查询用于检查值,但我需要让它检查不存在的字段。

我的mongo查询目前是这样的:

{ "$and" : [
  { "productId" : { "$in" : [ 00000000 , 11111111 , 22222222]}} ,
  { "count" : { "$gte" : 1}} , 
  { "purchaseCount" : { "$gt" : -1}}
  ]
}

这会在purchaseCount > -1时返回文档;但不返回字段purchaseCount不存在的文档。

如何退回purchaseCount不存在的文件以及purchaseCount是否存在,请考虑purchaseCount > -1

3 个答案:

答案 0 :(得分:1)

我在我的示例数据集中做到了这一点并且有效。

DataSet:

> db.prod.find();
{ "_id" : ObjectId("57be2dfdeceb47a04bfd4cf4"), "productId" : 0, "purchaseCount" : 2 }
{ "_id" : ObjectId("57be2e0deceb47a04bfd4cf5"), "productId" : 11111111 }
{ "_id" : ObjectId("57be2f06eceb47a04bfd4cf6"), "productId" : 222, "purchaseCount" : 100 }
{ "_id" : ObjectId("57be2f0aeceb47a04bfd4cf7"), "productId" : 222, "purchaseCount" : 1012 }

使用purchaseCount>查找记录的示例查询100  (你可以在这里添加你的条件purchaseCount> = -1) 如果purchaseCount没有退出。

> db.prod.find({"$or":[{"purchaseCount":{"$gt":100}},{"purchaseCount":{"$exists":false}}]})

输出

{ "_id" : ObjectId("57be2e0deceb47a04bfd4cf5"), "productId" : 11111111 }
{ "_id" : ObjectId("57be2f0aeceb47a04bfd4cf7"), "productId" : 222, "purchaseCount" : 1012 }
>

HTH

答案 1 :(得分:1)

您需要使用MongoDB exists operator;它具有与您正在使用的$和运算符类似的语法,采用一系列子查询:

{ "$and" : [
  { "productId" : { "$in" : [ 00000000 , 11111111 , 22222222]}} ,
  { "count" : { "$gte" : 1}} , 
  $or: [
    { "purchaseCount" : { "$exists" : false } },
    { "purchaseCount" : { "$gt" : -1 } },
    ]
  ]
}

答案 2 :(得分:0)

您必须使用mongodb中的exists功能

https://docs.mongodb.com/manual/reference/operator/query/exists/