MongoDB에서 쿼리 결과를 배열 형태로 얻고 싶다면 toArray() 메서드를 활용하면 됩니다. find() 메서드의 결과에 toArray()를 연결하면 커서가 아닌 자바스크립트 배열로 문서들을 손쉽게 변환할 수 있습니다.
기본 문법
db.컬렉션명.find({}, {필드명:1}).toArray();이제 실제 예제를 통해 단계별로 살펴보겠습니다.
예제용 컬렉션 생성하기
먼저 테스트에 사용할 컬렉션을 만들고 문서를 삽입합니다.
> db.createArrayDemo.insertOne({"UserName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbd6461de8cc557214c0e00")
}
> db.createArrayDemo.insertOne({"UserName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbd6467de8cc557214c0e01")
}
> db.createArrayDemo.insertOne({"UserName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbd646cde8cc557214c0e02")
}
> db.createArrayDemo.insertOne({"UserName":"Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbd6470de8cc557214c0e03")
}저장된 문서 확인하기
find() 메서드와 pretty()를 함께 사용하면 컬렉션의 모든 문서를 보기 좋게 출력할 수 있습니다.
> db.createArrayDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5cbd6461de8cc557214c0e00"), "UserName" : "Chris" }
{ "_id" : ObjectId("5cbd6467de8cc557214c0e01"), "UserName" : "David" }
{ "_id" : ObjectId("5cbd646cde8cc557214c0e02"), "UserName" : "Robert" }
{ "_id" : ObjectId("5cbd6470de8cc557214c0e03"), "UserName" : "Sam" }Case 1: _id 필드를 제외한 배열 만들기
UserName 필드만 포함된 배열을 만들고 싶고 _id 필드는 제외하고 싶다면 아래 쿼리처럼 프로젝션 옵션을 지정하면 됩니다. _id:0은 _id 필드를 숨기고, UserName:1은 UserName 필드만 가져오라는 의미입니다.
> db.createArrayDemo.find({}, {_id:0}, {UserName:1}).toArray();실행 결과는 다음과 같습니다.
[
{
"UserName" : "Chris"
},
{
"UserName" : "David"
},
{
"UserName" : "Robert"
},
{
"UserName" : "Sam"
}
]Case 2: _id 필드만 포함한 배열 만들기
반대로 _id 값만 담긴 배열이 필요하다면 아래와 같이 _id:1 옵션을 사용합니다.
> db.createArrayDemo.find({}, {_id:1}).toArray();실행 결과는 다음과 같습니다.
[
{
"_id" : ObjectId("5cbd6461de8cc557214c0e00")
},
{
"_id" : ObjectId("5cbd6467de8cc557214c0e01")
},
{
"_id" : ObjectId("5cbd646cde8cc557214c0e02")
},
{
"_id" : ObjectId("5cbd6470de8cc557214c0e03")
}
]정리
MongoDB에서 쿼리 결과를 배열로 변환하는 것은 매우 간단합니다. 핵심은 다음 두 가지입니다.
1. toArray() 메서드: find() 결과(커서)를 자바스크립트 배열로 변환하여 반복문 처리나 데이터 조작이 쉬워집니다.
2. 프로젝션 옵션: 두 번째 인자로 원하는 필드를 선택적으로 지정할 수 있으며, _id:0을 넣으면 기본적으로 포함되는 _id 필드를 제외할 수 있습니다.
이 방식을 응용하면 특정 필드만 모은 배열, 조건에 맞는 문서들의 배열 등 다양한 형태의 데이터를 손쉽게 추출할 수 있습니다.