2016-08-24 4 views
0

필드 중 하나에 특정 값이 있거나 존재하지 않는 문서를 찾아야합니다. 값을 확인하기 위해 작동하는 쿼리가 있지만 기존 필드가 아닌지 확인해야합니다.

내 몽고 쿼리는 현재 다음과 같이이다 :

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

이 문서를 반환 할 때 purchaseCount > -1; 필드 purchaseCount이없는 문서는 반환되지 않습니다.

purchaseCount이없는 문서는 어떻게 반품 할 수 있습니까? purchaseCount이있는 경우 purchaseCount > -1을 고려해보십시오.

답변

1

내가 이런 짓을에 exists 기능을 사용해야하고 그것은 작동합니다.

데이터 집합 :

> 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이 종료하지 않는 경우 (당신이 여기 purchaseCount> = -1 당신의 조건을 추가 할 수 있습니다)합니다.

> 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

'$ "대신'{"purchaseCount ": null}'을 사용했습니다. 그것도 작동합니다. 'Query '로 어떻게 변환 할 수 있는지 알고 계십니까? 예 :'ds.find (classType) .disableValidation() .field (PRODUCT_ID) .hasAnyOf (ProductIds) .field (COUNT) .greaterThanOrEq (getCount())'여기에'$ 또는'조건을 어떻게 추가 할 수 있습니까? – user1324887

관련 문제