Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 필드의 모든 요소가 상위 집합에 포함되어 있는지 확인하는 방법

MongoDB에서 특정 필드의 모든 요소가 상위 집합(superset)에 포함되어 있는지 확인하려면 find() 메서드와 함께 $elemMatch 연산자를 사용하면 됩니다. $elemMatch 연산자는 지정된 쿼리 조건을 모두 만족하는 요소를 하나 이상 가진 배열 필드를 포함하는 문서를 매칭합니다.

샘플 컬렉션 생성하기

먼저 문서를 포함한 컬렉션을 생성해 보겠습니다.

> db.demo624.insertOne({"ListOfName":["John","Chris","David","Bob"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e9ab3ff6c954c74be91e6a5")
}
> db.demo624.insertOne({"ListOfName":["John","Chris"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e9ab4026c954c74be91e6a6")
}
> db.demo624.insertOne({"ListOfName":["John","Chris","Carol"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e9ab4076c954c74be91e6a7")
}
> db.demo624.insertOne({"ListOfName":["John","Chris","Bob"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e9ab40e6c954c74be91e6a8")
}
> db.demo624.insertOne({"ListOfName":["John","Chris","Mike","Robert"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e9ab4186c954c74be91e6a9")
}

컬렉션의 모든 문서 조회하기

find() 메서드를 사용하여 컬렉션의 모든 문서를 출력합니다.

> db.demo624.find();

위 쿼리는 다음과 같은 결과를 생성합니다.

{ "_id" : ObjectId("5e9ab3ff6c954c74be91e6a5"), "ListOfName" : [ "John", "Chris", "David", "Bob" ] }
{ "_id" : ObjectId("5e9ab4026c954c74be91e6a6"), "ListOfName" : [ "John", "Chris" ] }
{ "_id" : ObjectId("5e9ab4076c954c74be91e6a7"), "ListOfName" : [ "John", "Chris", "Carol" ] }
{ "_id" : ObjectId("5e9ab40e6c954c74be91e6a8"), "ListOfName" : [ "John", "Chris", "Bob" ] }
{ "_id" : ObjectId("5e9ab4186c954c74be91e6a9"), "ListOfName" : [ "John", "Chris", "Mike", "Robert" ] }

상위 집합 포함 여부 확인 쿼리

필드의 모든 요소가 상위 집합에 포함되어 있는지 확인하는 쿼리는 다음과 같습니다. 여기서는 $not$nin을 조합하여, 배열 내에 상위 집합에 속하지 않는 요소가 하나라도 있는 문서를 제외시킵니다.

> db.demo624.find({"ListOfName":{$not:{$elemMatch:{$nin:["John", "Chris", "David", "Bob"]}}}});

이 쿼리는 다음과 같은 결과를 반환합니다.

{ "_id" : ObjectId("5e9ab3ff6c954c74be91e6a5"), "ListOfName" : [ "John", "Chris", "David", "Bob" ] }
{ "_id" : ObjectId("5e9ab4026c954c74be91e6a6"), "ListOfName" : [ "John", "Chris" ] }
{ "_id" : ObjectId("5e9ab40e6c954c74be91e6a8"), "ListOfName" : [ "John", "Chris", "Bob" ] }

결과 분석

출력 결과를 보면 ["John", "Chris", "Carol"]과 ["John", "Chris", "Mike", "Robert"] 문서는 제외되었습니다. 그 이유는 "Carol", "Mike", "Robert"가 상위 집합인 ["John", "Chris", "David", "Bob"]에 속하지 않기 때문입니다. 반면 나머지 세 문서의 배열 요소는 모두 상위 집합에 포함되므로 정상적으로 매칭되었습니다.