2017-11-21 5 views
0

이 mongoDB 쿼리에 대한 설명을 제공해주십시오.

db.inventory.find({ qty : { $all : [ { $elemMatch : { size: "M", num : { $gt : 40},color : "green" }} ,{ $elemMatch : { num :100 , color : "green"}} ]}}).pretty() 
+1

두 쿼리 연산자에 대한 설명서가 우수합니다. https://docs.mongodb.com/manual/reference/operator/query/all/ 및 https://docs.mongodb.com/manual/reference/operator/query/elemMatch/ –

+0

하지만이 쿼리는 $ all에 지정된 조건. 내가 이해하는 것은 모든 조건을 모두 만족하는 문서를 모으는 것이다. 내가 틀렸다면 나를 바로 잡아라. 더 명확히하기 위해 출력을 추가 할 수 있습니다. @AlexP. –

+0

명확화는 항상 좋은 것입니다 –

답변

1

좋아, 그래서 우리는 다음과 같은 문서가 상상 : 여기

/* 1 */ 
{ 
    "_id" : ObjectId("5a148f114d8a2fe38bec772a"), 
    "samplearray" : [ 
     { 
      "size" : "M", 
      "num" : 45, 
      "color" : "black" 
     }, 
     { 
      "size" : "L", 
      "num" : 75, 
      "color" : "blue" 
     } 
    ] 
} 

samplearray 두 개의 항목

이 쿼리가 있습니다

db.sample.find({ samplearray: { $elemMatch: { num: { $gt: 41 }}}}) 

겠습니까 연구를 문서를 반송하십시오. 그것은 아무것도 반환하지 말아야

db.sample.find({ samplearray: { $elemMatch: { num: { $gte: 50 }, color: "black"}}}) 

: 우리는이 쿼리를 할 경우 num 지금보다 41

입니다 쿼리에서 우리는 배열 값 항목을 부탁드립니다. $elemMatch은 각 개별 배열 값 항목을 조사하기 때문에. 이제는 문서가 일치하지 않습니다. 단일 배열에는 두 조건을 모두 만족하는 배열 값 항목이 없기 때문에 (:

{ 
    "size" : "L", 
    "num" : 75, 
    "color" : "blue" 
} 

예)

color: "black" 하나 (예 :

{ 
    "size" : "M", 
    "num" : 45, 
    "color" : "black" 
} 

) 있지만 두 하나의 문서에서 우리는 배열 num: { $gte: 50 }을 충족 항목이 있습니다. 우리가 소개하는 곳 여기

우리가 결과 문서를 얻기 위해 원하는 경우, 우리는 우리의 쿼리를 다시 작성해야하고는 $all :

db.sample.find({ 
    samplearray: { 
     $all: [{ 
       $elemMatch: { 
        num: { 
         $gte: 50 
        } 
       } 
      }, 
      { 
       $elemMatch: { 
        color: "black" 
       } 
      } 
     ] 
    } 
}) 

지금 $all$elemMatch 조금 이해합니까 약간 나아?

+0

더 많은 설명 주셔서 감사합니다! –