我需要查找其中一个字段具有特定值或不存在的文档。我有一个查询用于检查值,但我需要让它检查不存在的字段。
我的mongo查询目前是这样的:
{ "$and" : [
{ "productId" : { "$in" : [ 00000000 , 11111111 , 22222222]}} ,
{ "count" : { "$gte" : 1}} ,
{ "purchaseCount" : { "$gt" : -1}}
]
}
这会在purchaseCount > -1
时返回文档;但不返回字段purchaseCount
不存在的文档。
如何退回purchaseCount
不存在的文件以及purchaseCount
是否存在,请考虑purchaseCount > -1
?
答案 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/