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 배열 안에 Mike와 Sam이라는 클라이언트 이름이 모두 포함된 문서만 조회해 보겠습니다.
> db.demo163.find({"ClientDetails": {$all: [{"ClientName": "Mike"}, {"ClientName": "Sam"}]}});위 쿼리는 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5e3686d59e4f06af551997c6"), "ClientDetails" : [ { "ClientName" : "Mike" }, { "ClientName" : "Sam" } ] }결과 분석
출력 결과를 보면 세 번째 문서(Robert, Sam)는 Sam은 포함하지만 Mike는 없기 때문에 제외되었습니다. 이처럼 $all은 배열 내에 지정한 요소들이 모두 존재하는 경우에만 해당 문서를 반환하므로, 복수 조건 매칭이 필요한 상황에서 정확한 필터링을 수행할 수 있습니다.