$all
$all
$all
연산자는 필드 값이 지정된 모든 요소를 포함하는 배열인 문서를 선택합니다.
호환성
다음 환경에서 호스팅되는 배포에 $all
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
$all
표현식을 지정하려면 다음 프로토타입을 사용합니다.
{ <field>: { $all: [ <value1> , <value2> ... ] } }
행동
$and
작업과 동등합니다.
$all
는 지정된 값의 $and
연산과 동일합니다. 즉, 다음 성명서.
{ tags: { $all: [ "ssl" , "security" ] } }
은 다음과 동일합니다:
{ $and: [ { tags: "ssl" }, { tags: "security" } ] }
중첩 배열
중첩된 배열 의 배열 이 전달되는 경우(예: [ [ "A" ] ]
), $all
는 필드 에 중첩 배열 이 요소로 포함된 문서와 일치합니다(예: field: [ [ "A" ], ... ]
), 또는 필드 가 중첩 배열 과 같음(예: field: [ "A" ]
).
예를 들어 다음 쿼리 [1]를 살펴보겠습니다.
db.articles.find( { tags: { $all: [ [ "ssl", "security" ] ] } } )
해당 쿼리는 다음과 같습니다.
db.articles.find( { $and: [ { tags: [ "ssl", "security" ] } ] } )
은 다음과 동일합니다.
db.articles.find( { tags: [ "ssl", "security" ] } )
따라서 $all
표현식 은 tags
필드 가 중첩 배열 [ "ssl",
"security" ]
을 포함하는 배열 이거나 중첩 배열 과 동일한 배열 인 문서와 일치합니다.
tags: [ [ "ssl", "security" ], ... ] tags: [ "ssl", "security" ]
[1] | 단일 요소가 있는 $all 표현식은 단일 요소만 일치하는 경우에는 $all 표현식이 불필요하므로 설명하는 목적으로 사용됩니다. 대신 단일 요소를 일치시킬 때는 '포함' 표현식(즉, arrayField: element )가 더 적합합니다. |
예시
다음 예시에서는 문서가 포함된 inventory
컬렉션을 사용합니다.
{ _id: ObjectId("5234cc89687ea597eabee675"), code: "xyz", tags: [ "school", "book", "bag", "headphone", "appliance" ], qty: [ { size: "S", num: 10, color: "blue" }, { size: "M", num: 45, color: "blue" }, { size: "L", num: 100, color: "green" } ] } { _id: ObjectId("5234cc8a687ea597eabee676"), code: "abc", tags: [ "appliance", "school", "book" ], qty: [ { size: "6", num: 100, color: "green" }, { size: "6", num: 50, color: "blue" }, { size: "8", num: 100, color: "brown" } ] } { _id: ObjectId("5234ccb7687ea597eabee677"), code: "efg", tags: [ "school", "book" ], qty: [ { size: "S", num: 10, color: "blue" }, { size: "M", num: 100, color: "blue" }, { size: "L", num: 100, color: "green" } ] } { _id: ObjectId("52350353b2eff1353b349de9"), code: "ijk", tags: [ "electronics", "school" ], qty: [ { size: "M", num: 100, color: "green" } ] }
$all
을 사용하여 값 일치시키기
다음 작업은 $all
연산자 를 사용하여 inventory
컬렉션 에서 tags
필드 값이 appliance
, school
및 book
를 포함하는 배열 인 문서를 쿼리 합니다.
db.inventory.find( { tags: { $all: [ "appliance", "school", "book" ] } } )
위의 쿼리는 다음과 같은 문서를 반환합니다.
{ _id: ObjectId("5234cc89687ea597eabee675"), code: "xyz", tags: [ "school", "book", "bag", "headphone", "appliance" ], qty: [ { size: "S", num: 10, color: "blue" }, { size: "M", num: 45, color: "blue" }, { size: "L", num: 100, color: "green" } ] } { _id: ObjectId("5234cc8a687ea597eabee676"), code: "abc", tags: [ "appliance", "school", "book" ], qty: [ { size: "6", num: 100, color: "green" }, { size: "6", num: 50, color: "blue" }, { size: "8", num: 100, color: "brown" } ] }
$elemMatch
과 함께 $all
사용
필드에 문서 배열이 포함되어 있는 경우 $all
연산자와 $elemMatch
연산자를 함께 사용할 수 있습니다.
다음 작업은 inventory
컬렉션에서 qty
필드 값이 배열이며, 그 배열의 요소가 $elemMatch
기준과 일치하는 문서를 조회합니다.
db.inventory.find( { qty: { $all: [ { "$elemMatch" : { size: "M", num: { $gt: 50} } }, { "$elemMatch" : { num : 100, color: "green" } } ] } } )
이 쿼리는 다음 문서를 반환합니다.
{ "_id" : ObjectId("5234ccb7687ea597eabee677"), "code" : "efg", "tags" : [ "school", "book"], "qty" : [ { "size" : "S", "num" : 10, "color" : "blue" }, { "size" : "M", "num" : 100, "color" : "blue" }, { "size" : "L", "num" : 100, "color" : "green" } ] } { "_id" : ObjectId("52350353b2eff1353b349de9"), "code" : "ijk", "tags" : [ "electronics", "school" ], "qty" : [ { "size" : "M", "num" : 100, "color" : "green" } ] }
$all
연산자는 배열에 대한 쿼리를 지원하기 위해 존재합니다. 그러나 다음 예시에서처럼 배열이 아닌 field
에 대해서도 $all
연산자를 사용할 수 있습니다:
db.inventory.find( { "qty.num": { $all: [ 50 ] } } )
그러나 동일한 쿼리를 표현하려면 다음 형식을 사용하세요:
db.inventory.find( { "qty.num" : 50 } )
두 쿼리 모두 inventory
컬렉션에서 num
필드 값이 50
인 모든 문서를 선택합니다.
참고
대부분의 경우 MongoDB는 배열을 세트로 처리하지 않습니다. 이 연산자는 이 접근 방식에 대한 주목할 만한 예외를 제공합니다.
추가 예시
배열 쿼리에 대한 추가 예시는 다음을 참조하세요.
쿼리에 대한 추가 예는 쿼리 문서를 참조하세요.