2016-08-24 25 views
0

我需要找到其中一個字段具有特定值或不存在的文檔。我有一個查詢用於檢查值,但我需要使它也檢查不存在的字段。

我蒙戈查詢是這樣目前:

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

這將返回文檔時purchaseCount > -1;但不會返回字段purchaseCount不存在的文檔。

如何返回purchaseCount不存在的文件,如果存在purchaseCount則考慮purchaseCount > -1

回答

1

我做這個和它的作品。

數據集:

> 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

0

您需要使用MongoDB的exists operator;它具有與您已經使用的$和操作符類似的語法,並使用一系列子查詢:

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

而不是'$ exists'我使用過'{「purchaseCount」:null}'。它也可以工作。你知道我怎麼把它轉換成Query?例如:'ds.find(classType).disableValidation().field(PRODUCT_ID).hasAnyOf(ProductIds).field(COUNT).greaterThanOrEq(getCount())'如何在這裏添加'$或'標準? – user1324887

相關問題