2017-10-23 3 views
0

에 일치하는 경우 기본적으로 "focusStores"필드에 특정 저장소가 있으면 true라는 쿼리에서 부울 필드 "focus"를 만들려고합니다.Mongo 3.2 Boolean 배열

예 :다음 초점의 제품에 - [ "AAA", "BBB"]가 저장되어 있고 "AAA"라는 검색 기준을 사용하는 경우 초점 필드가 true 여야합니다.

현재 이것은 최선의 시도입니다. 어떤 도움을 주시면 감사하겠습니다! MongoDB를 3.2 사용 $setIsSubset를 들어

db.getCollection('Products').aggregate([ 
     { 
     $project: { 
      sku: 1, 
      focusStores : 1, 
      focusTmp : {$focusStores: {$in : 'AAA'}} 
     } 
     } 
    ]) 
+0

$ cond를 사용할 수 있습니다. 예 : true, 그렇지 않으면 : false}} – PVH

답변

1

는 :

db.getCollection('Products').aggregate([ 
     { 
     $project: { 
      sku: 1, 
      focusStores : 1, 
      focusTmp : { $setIsSubset: [ ["AAA"], { "$ifNull": [ "$focusStores", [] } ] } 
     } 
     } 
    ]) 

당신은 아마 MongoDB를 3.4 연산자입니다 $in을 읽고, 잘못된 구문을 얻었다. 그래야만합니다 :

db.getCollection('Products').aggregate([ 
     { 
     $project: { 
      sku: 1, 
      focusStores : 1, 
      focusTmp : { $in: [ "AAA", { "$ifNull": [ "$focusStores", [] ] } ] } 
     } 
     } 
    ]) 

물론 지원 버전이있는 경우에만 가능합니다.

두 경우 모두 누락 된 속성에 대해 $ifNull으로 포장하십시오.

+0

$ setIsSubset "두 피연산자를 $ setIsSubset 중 하나를 시도 할 때이 오류가 나타납니다. {$ focusStores : {$ focusStores : {$ in : 'AAA'}} 두 번째 인수는 형식이어야합니다 : EOO " – MMrj

+0

@MMrj 질문에 focusStores가'["AAA ","BBB "]'배열입니까? 왜냐하면 배열이 아니라면 그 속성은'[]'로 묶어야하기 때문입니다. 둘 다 배열이 아니라면'$ eq' 만 원할 것입니다. 하지만 배열과 마찬가지로 질문을 읽는 중입니다. 질문하는 것처럼 보입니다. –

+0

예, 필드가 배열이어야하지만 null이있을 수 있습니다. 문제가있는 것 같습니다. – MMrj

관련 문제