Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / /

$all

이 페이지의 내용

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

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

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

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

  • MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전

  • MongoDB Community: 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 연산자는 배열에 대한 쿼리를 지원하기 위해 존재합니다. 그러나 다음 예시에서처럼 배열이 아닌 field에 대해서도 $all 연산자를 사용할 수 있습니다:

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

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

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

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

참고

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

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

쿼리에 대한 추가 예는 쿼리 문서를 참조하세요.

다음도 참조하세요.

돌아가기

배열 쿼리