MongoDB에서 find() 메서드의 조회 결과를 배열 형태로 저장하고 싶다면 toArray() 메서드를 사용하면 됩니다. 이 메서드는 커서(cursor)에 담긴 문서들을 자바스크립트 배열로 변환해 주기 때문에, 이후 배열처럼 자유롭게 다룰 수 있다는 장점이 있습니다.
기본 문법
var anyVariableName = db.yourCollectionName.find().toArray();
이제 실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 컬렉션 생성 및 문서 삽입
먼저 예제에 사용할 컬렉션을 만들고 문서를 삽입합니다.
> db.mongoDbResultInArrayDemo.insertOne({"CustomerName":"David Miller","CustomerAge":24,"isMarried":false});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd99bd5b50a6c6dd317ad92")
}
> db.mongoDbResultInArrayDemo.insertOne({"CustomerName":"Sam Williams","CustomerAge":46,"isMarried":true});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd99beab50a6c6dd317ad93")
}
> db.mongoDbResultInArrayDemo.insertOne({"CustomerName":"Carol Taylor","CustomerAge":23,"isMarried":false});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd99bf9b50a6c6dd317ad94")
}2단계: find()로 전체 문서 확인
find() 메서드와 pretty()를 함께 사용하면 컬렉션의 모든 문서를 보기 좋게 출력할 수 있습니다.
> db.mongoDbResultInArrayDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5cd99bd5b50a6c6dd317ad92"),
"CustomerName" : "David Miller",
"CustomerAge" : 24,
"isMarried" : false
}
{
"_id" : ObjectId("5cd99beab50a6c6dd317ad93"),
"CustomerName" : "Sam Williams",
"CustomerAge" : 46,
"isMarried" : true
}
{
"_id" : ObjectId("5cd99bf9b50a6c6dd317ad94"),
"CustomerName" : "Carol Taylor",
"CustomerAge" : 23,
"isMarried" : false
}3단계: 조회 결과를 배열에 저장하기
이제 핵심 단계입니다. find() 뒤에 toArray()를 붙여 조회 결과를 변수에 배열 형태로 저장합니다.
> var mongoDbResultIntoArray = db.mongoDbResultInArrayArray.find().toArray();
4단계: 배열에 저장된 데이터 확인
저장된 변수를 그대로 호출하면 배열 안에 담긴 모든 문서를 확인할 수 있습니다.
> mongoDbResultIntoArray
실행 결과는 다음과 같습니다.
[
{
"_id" : ObjectId("5cd99bd5b50a6c6dd317ad92"),
"CustomerName" : "David Miller",
"CustomerAge" : 24,
"isMarried" : false
},
{
"_id" : ObjectId("5cd99beab50a6c6dd317ad93"),
"CustomerName" : "Sam Williams",
"CustomerAge" : 46,
"isMarried" : true
},
{
"_id" : ObjectId("5cd99bf9b50a6c6dd317ad94"),
"CustomerName" : "Carol Taylor",
"CustomerAge" : 23,
"isMarried" : false
}
]정리 및 참고 사항
toArray()는 커서가 가리키는 모든 문서를 한 번에 메모리에 로드하여 배열로 반환합니다. 따라서 소량의 데이터를 다룰 때는 매우 편리하지만, 대용량 컬렉션을 대상으로 사용하면 메모리 부담이 커질 수 있으니 주의해야 합니다.
배열로 변환된 결과는 일반 자바스크립트 배열이므로 length 속성으로 문서 개수를 세거나, forEach, map, filter 같은 배열 메서드를 활용해 추가 가공을 할 수 있다는 점도 기억해 두면 유용합니다.