2017-03-12 6 views
0

나는 데이터베이스를 다음과 같이 모델링 유스 케이스가 포함되어있는 경우 확인 : 이제MongoDB를이 : 중첩 된 배열의 하위 배열

name: XYZ 
gradeCards: [{ 
    id: 1234, // id of the report card 
    comments: ['GOOD','NICE','WOW'] 
}, { 
    id: 2345, 
    comments: ['GOOD','NICE TRY'] 
}] 

을, 나는 다음과 같이 스키마를 조회하고자하는 쿼리를 가지고 :

ID 및 값 목록이 제공됩니다. 는 예를 들어 주어진리스트는 다음과 같다 : 요컨대

[{ 
    id: 1234, 
    comments: ['GOOD','NICE'] 
},{ 
    id: 2345, 
    comments: ['GOOD'] 
}] 

ID는 일치되어야하며 코멘트 해당 ID에 대한 코멘트 어레이의 서브 어레이 있어야하며, 모든 조건에 지정된 배열이 일치해야하므로 제공된 모든 조건에서 AND 조건이어야합니다.

이 쿼리를 얻을 수 있었지만 comments 배열의 모든 요소와 일치합니다.이 ID는 정확히 일치해야하고 주석은 하위 배열이어야합니다. 댓글 배열의 모든 요소를 ​​일치하는

:

db.getCollection('user').find({arr:{ 
    $all: [{ 
     id:1234, 
     comments:['GOOD','NICE','WOW'] 
    },{ 
     id:2345, 
     comments:['GOOD','NICE TRY'] 
    }] 
}}) 

답변

1

당신은 쿼리 조건에 일치하는 $elemMatch으로 $all을 시도 할 수 있습니다.

db.collection.find({ 
    gradeCards: { 
     $all: [{ 
      "$elemMatch": { 
       id: 1234, 
       comments: { 
        $in: ['GOOD', 'NICE'] 
       } 
      } 
     }, { 
      "$elemMatch": { 
       id: 2345, 
       comments: { 
        $in: ['GOOD'] 
       } 
      } 
     }, ] 
    } 
}) 
+0

답변 주셔서 감사합니다. $ elemMatch가 필요한 이유를 설명해주십시오. 나는 $ in을 사용합니다. –

+0

당신은 오신 것을 환영합니다. '$ elemMatch'는 배열에있는 적어도 하나의 문서에 일치하는'id'와'comments' 쿼리 값이 일치하고'$ elemMatch'가'$ elemMatch'와 일치하여 각각의 쿼리 조건에서 두 문서를 일치시킵니다. 자세한 내용은 https://docs.mongodb.com/manual/reference/operator/query/elemMatch/ – Veeram

+0

지금 받으십시오. 도움을 주셔서 감사합니다 –