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

MongoDB에서 선택한 항목을 배열 형태로 조회하는 방법

MongoDB에서 특정 조건에 맞는 문서의 필드 값을 배열 형태로 가져오고 싶다면 distinct() 메서드를 사용하면 됩니다. 이 메서드는 단일 컬렉션 또는 뷰에서 지정된 필드의 고유(distinct) 값들을 찾아 그 결과를 배열로 반환합니다.

1. 샘플 컬렉션 생성

먼저 테스트용으로 사용할 컬렉션과 문서를 만들어 보겠습니다.

> db.projectionListDemo.insertOne({"_id":"1","Subject":["MongoDB","MySQL","Java"]});
{ "acknowledged" : true, "insertedId" : "1" }
> db.projectionListDemo.insertOne({"_id":"2","Subject":["MongoDB","C","C++"]});
{ "acknowledged" : true, "insertedId" : "2" }
> db.projectionListDemo.insertOne({"_id":"3","Subject":["Java","Python"]});
{ "acknowledged" : true, "insertedId" : "3" }

위 코드는 세 개의 문서를 projectionListDemo 컬렉션에 삽입합니다. 각 문서는 과목 목록을 담고 있는 Subject 배열 필드를 가지고 있습니다.

2. 저장된 문서 확인하기

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

> db.projectionListDemo.find().pretty();

출력 결과

{ "_id" : "1", "Subject" : [ "MongoDB", "MySQL", "Java" ] }
{ "_id" : "2", "Subject" : [ "MongoDB", "C", "C++" ] }
{ "_id" : "3", "Subject" : [ "Java", "Python" ] }

3. distinct()로 선택한 항목을 배열로 조회하기

이제 핵심 부분입니다. distinct() 메서드의 첫 번째 인자에는 고유 값을 추출할 필드명을, 두 번째 인자에는 쿼리 조건을 전달합니다. 예를 들어, Subject 필드에 "MongoDB"가 포함된 문서들의 _id 값을 배열로 가져오려면 다음과 같이 작성합니다.

> db.projectionListDemo.distinct('_id', {'Subject' : 'MongoDB'});

출력 결과

[ "1", "2" ]

실행 결과를 보면 Subject에 "MongoDB"가 포함된 문서는 _id가 "1"과 "2"인 두 개뿐이므로, 해당 값들이 배열 형태로 깔끔하게 반환된 것을 확인할 수 있습니다.

정리

이처럼 MongoDB에서 조건에 일치하는 문서의 특정 필드 값을 배열로 투영(projection)하고 싶을 때는 distinct(필드명, 쿼리조건) 구문을 활용하면 간단하게 해결할 수 있습니다. 중복 없이 고유한 값만 필요로 하는 경우에도 유용하게 사용할 수 있습니다.