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

MongoDB에서 선택한 항목의 배열로 프로젝션 결과 얻는 방법

MongoDB에서 선택한 항목의 배열로 프로젝션 결과 얻기

MongoDB에서 특정 조건에 일치하는 문서들의 _id 값을 배열 형태로 조회하려면 distinct() 메서드를 활용할 수 있습니다. 이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 문서가 포함된 컬렉션 생성

먼저 이름 목록을 담고 있는 문서들로 컬렉션을 생성해 보겠습니다.

> db.demo151.insertOne({"ListOfNames":["Chris","David","Mike"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3513b6fdf09dd6d08539da")
}
> db.demo151.insertOne({"ListOfNames":["Mike","Bob"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3513c4fdf09dd6d08539db")
}
> db.demo151.insertOne({"ListOfNames":["John","David","Chris"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3513dcfdf09dd6d08539dc")
}

2. find() 메서드로 전체 문서 확인

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

> db.demo151.find();

위 명령을 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

{ "_id" : ObjectId("5e3513b6fdf09dd6d08539da"), "ListOfNames" : [ "Chris", "David", "Mike" ] }
{ "_id" : ObjectId("5e3513c4fdf09dd6d08539db"), "ListOfNames" : [ "Mike", "Bob" ] }
{ "_id" : ObjectId("5e3513dcfdf09dd6d08539dc"), "ListOfNames" : [ "John", "David", "Chris" ] }

3. distinct() 메서드로 선택한 항목의 배열 조회

이제 특정 값(여기서는 "Mike")이 ListOfNames 배열에 포함된 문서들의 _id만 배열로 추출해 보겠습니다.

> db.demo151.distinct('_id', {'ListOfNames' : "Mike"});

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

[
   ObjectId("5e3513b6fdf09dd6d08539da"),
   ObjectId("5e3513c4fdf09dd6d08539db")
]

동작 원리 정리

distinct() 메서드는 첫 번째 인자로 반환할 필드명('_id')을, 두 번째 인자로 조회 조건({'ListOfNames': "Mike"})을 받습니다. MongoDB는 배열 필드 내부의 요소와도 자동으로 매칭되므로, 별도의 연산자 없이도 배열 안에 "Mike"가 포함된 모든 문서를 찾아 해당 문서들의 _id 값만 중복 없이 배열로 반환해 줍니다.

이처럼 distinct()를 활용하면 조건에 맞는 문서의 ID 목록을 간단하게 배열 형태로 가져올 수 있어, 후속 작업(예: 다른 컬렉션과의 조인, 배치 처리 등)에 유용하게 활용할 수 있습니다.