문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

$all

이 페이지의 내용

  • 호환성
  • 구문
  • 행동
  • 예제
  • 추가 예제
$all

$all 연산자는 필드 값이 지정된 모든 요소를 포함하는 배열인 문서를 선택합니다.

다음 환경에서 호스팅되는 배포에 $all 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

$all 표현식을 지정하려면 다음 프로토타입을 사용합니다.

{ <field>: { $all: [ <value1> , <value2> ... ] } }

$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 연산자를 사용하여 inventory 컬렉션에서 tags 필드 값이 appliance, schoolbook 를 포함하는 배열인 문서를 쿼리합니다.

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" }
]
}

필드에 문서 배열이 포함된 경우 $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 연산자는 배열에 대한 쿼리를 지원하기 위해 존재합니다. 그러나 다음 예와 같이 $all 연산자를 사용하여 배열이 아닌 field 에 대해서도 선택할 수 있습니다.

db.inventory.find( { "qty.num": { $all: [ 50 ] } } )

그러나 동일한 쿼리를 표현하려면 다음 형식을 사용하세요:

db.inventory.find( { "qty.num" : 50 } )

두 쿼리 모두 inventory컬렉션에서 num필드 값이 50인 모든 문서를 선택합니다.

참고

대부분의 경우 MongoDB는 배열을 세트로 처리하지 않습니다. 이 연산자는 이 접근 방식에 대한 주목할 만한 예외를 제공합니다.

배열 쿼리에 대한 추가 예시는 다음을 참조하세요:

쿼리의 추가적인 예시는 다음을 참조하세요:

다음도 참조하세요.

← 배열 쿼리 연산자