2016-08-24 24 views
0

フィールドのいずれかに値があるか存在しないドキュメントを探す必要があります。私は値をチェックするために働くクエリを持っていますが、私はそれが存在しないフィールドについてもチェックする必要があります。

私のmongoクエリは、現在、このようなものです:

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

これはドキュメントを返すときpurchaseCount > -1。フィールドpurchaseCountが存在しない文書は返されません。

purchaseCountが存在しない場合の返品方法とpurchaseCountが存在する場合は、purchaseCount > -1としますか?

答えて

1

exists機能を使用する必要があります。

のDataSet:purchaseCountを持つレコードを見つけるため

> 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 } 

サンプルクエリ> 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あなたはMongoDBのexists operatorを使用する必要が

0

。サブクエリの配列を取って、すでに使用している$と演算子と同じ構文をしています。

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

'$ exists'の代わりに' {"purchaseCount":null} 'を使用しました。それも動作します。私はそれを 'Query'にどのように変換できますか?ここで '$または'条件を追加するにはどうすればよいですか?(例:getCount()): 'ds.find(classType).disableValidation().field(PRODUCT_ID).hasAnyOf(ProductIds).field(COUNT).greaterThanOrEq – user1324887

関連する問題