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

MongoDB $all 연산자로 배열 필드에서 특정 이름 목록이 포함된 문서 조회하기

MongoDB에서 필드 값이 배열로 저장된 문서 중, 특정 이름들이 모두 포함된 문서만 조회하고 싶다면 $all 연산자를 사용하면 됩니다. $all은 지정한 모든 요소가 배열 안에 존재하는 문서만 선택하는 연산자입니다.

1. 테스트 컬렉션 생성

먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.demo642.insertOne(
...     {
...        _id:1,
...        ListOfNames:["Robert","John"]
...    }
... );
{ "acknowledged" : true, "insertedId" : 1 }
> db.demo642.insertOne( { _id:2, ListOfNames:["Robert","Chris"] } );
{ "acknowledged" : true, "insertedId" : 2 }

2. 전체 문서 확인하기

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

> db.demo642.find();

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

{ "_id" : 1, "ListOfNames" : [ "Robert", "John" ] }
{ "_id" : 2, "ListOfNames" : [ "Robert", "Chris" ] }

3. $all 연산자로 특정 이름 목록 조회하기

이제 배열 필드 값에서 특정 이름들이 모두 포함된 문서를 조회하는 쿼리를 살펴보겠습니다. 아래 예제는 ListOfNames 배열에 ChrisRobert가 모두 들어 있는 문서를 찾습니다.

> db.demo642.find({ListOfNames: {
...     $all: [ "Chris", "Robert" ]
... }})

실행 결과는 다음과 같습니다.

{ "_id" : 2, "ListOfNames" : [ "Robert", "Chris" ] }

참고 사항

$all 연산자는 요소의 순서와 관계없이 지정된 모든 값이 배열에 포함되어 있는지만 확인합니다. 따라서 ["Chris", "Robert"]로 조건을 지정했더라도 배열 내 저장 순서가 달라도 정상적으로 매칭됩니다. 반면 하나라도 누락된 문서(예: Robert만 있는 경우)는 결과에서 제외됩니다.