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

MongoDB에서 $all 연산자로 배열 조건 쿼리하기

MongoDB에서 $all 연산자는 특정 필드의 값이 배열이고, 그 배열이 지정된 모든 요소를 포함하고 있는 문서만 선택할 때 사용합니다. 즉, 여러 조건이 배열 안에 동시에 존재하는지 확인해야 할 때 유용합니다.

예제 컬렉션 생성하기

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

> db.demo163.insertOne(
...     {
...        "ClientDetails": [{
...           "ClientName": "Chris"
...
...        }, {
...           "ClientName": "David"
...
...        }
...    ]
...
... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3686d49e4f06af551997c5")
}
> db.demo163.insertOne(
...     {
...        "ClientDetails": [{
...           "ClientName": "Mike"
...
...    }, {
...    "ClientName": "Sam"
...
...    }
... ]
...
... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3686d59e4f06af551997c6")
}
>
db.demo163.insertOne(
...     {
...        "ClientDetails": [{
...           "ClientName": "Robert"
...
...        }, {
...           "ClientName": "Sam"
...
...        }
...    ]
... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3686d59e4f06af551997c7")
}

저장된 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.

> db.demo163.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e3686d49e4f06af551997c5"), "ClientDetails" : [ { "ClientName" : "Chris" }, { "ClientName" : "David" } ] }
{ "_id" : ObjectId("5e3686d59e4f06af551997c6"), "ClientDetails" : [ { "ClientName" : "Mike" }, { "ClientName" : "Sam" } ] }
{ "_id" : ObjectId("5e3686d59e4f06af551997c7"), "ClientDetails" : [ { "ClientName" : "Robert" }, { "ClientName" : "Sam" } ] }

$all 연산자를 활용한 쿼리

이제 ClientDetails 배열 안에 MikeSam이라는 클라이언트 이름이 모두 포함된 문서만 조회해 보겠습니다.

> db.demo163.find({"ClientDetails": {$all: [{"ClientName": "Mike"}, {"ClientName": "Sam"}]}});

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e3686d59e4f06af551997c6"), "ClientDetails" : [ { "ClientName" : "Mike" }, { "ClientName" : "Sam" } ] }

결과 분석

출력 결과를 보면 세 번째 문서(Robert, Sam)는 Sam은 포함하지만 Mike는 없기 때문에 제외되었습니다. 이처럼 $all은 배열 내에 지정한 요소들이 모두 존재하는 경우에만 해당 문서를 반환하므로, 복수 조건 매칭이 필요한 상황에서 정확한 필터링을 수행할 수 있습니다.