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

MongoDB에서 특정 필드의 값만 반환하는 방법

MongoDB에서 필드 값만 추출하는 방법

MongoDB에서 특정 필드의 값만 반환하고 싶다면, 쿼리를 작성한 후 forEach 루프를 활용하면 됩니다. 일반적인 find() 메서드는 도큐먼트 전체를 반환하기 때문에, 원하는 필드 값만 배열에 모으려면 약간의 추가 작업이 필요합니다.

먼저 예제로 사용할 컬렉션을 생성하고 도큐먼트를 삽입해 보겠습니다.

> db.returnOnlyValueOfFieldDemo.insertOne({"ClientName":"Larry"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ea537d628fa4220163b6e")
}
> db.returnOnlyValueOfFieldDemo.insertOne({"ClientName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ea53bd628fa4220163b6f")
}
> db.returnOnlyValueOfFieldDemo.insertOne({"ClientName":"Robert"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ea541d628fa4220163b70")
}
> db.returnOnlyValueOfFieldDemo.insertOne({"ClientName":"Ramit"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ea549d628fa4220163b71")
}

find() 메서드로 전체 도큐먼트 조회하기

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

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

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

{ "_id" : ObjectId("5c9ea537d628fa4220163b6e"), "ClientName" : "Larry" }
{ "_id" : ObjectId("5c9ea53bd628fa4220163b6f"), "ClientName" : "Chris" }
{ "_id" : ObjectId("5c9ea541d628fa4220163b70"), "ClientName" : "Robert" }
{ "_id" : ObjectId("5c9ea549d628fa4220163b71"), "ClientName" : "Ramit" }

보시다시피 _id와 ClientName이 함께 출력되는데, 이번에는 ClientName 값만 따로 추출해 보겠습니다.

forEach 루프로 필드 값만 반환하기

빈 배열을 선언한 뒤, forEach 루프를 통해 각 도큐먼트에서 원하는 필드 값을 꺼내 배열에 저장합니다.

> var output = []
> db.returnOnlyValueOfFieldDemo.find().forEach(function(document) {output.push(document.ClientName) })

값은 output 배열에 저장되어 있으므로, 몽고 셸(Mongo shell)에서 변수 이름을 입력하기만 하면 결과를 확인할 수 있습니다.

> output

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

[ "Larry", "Chris", "Robert", "Ramit" ]

참고: 프로젝션(projection)을 활용한 대안

forEach 대신 find() 메서드의 프로젝션 옵션을 사용해도 특정 필드만 조회할 수 있습니다. 예를 들어 db.returnOnlyValueOfFieldDemo.find({}, {"ClientName": 1, "_id": 0})처럼 두 번째 인자에 필드명을 지정하고 _id를 제외하면, ClientName 필드만 포함된 도큐먼트 목록을 얻을 수 있습니다. 다만 이 방식은 여전히 도큐먼트 형태로 반환되기 때문에, 순수하게 값만 담긴 배열이 필요하다면 위에서 소개한 forEach 방식이 더 적합합니다.