MongoDB에서는 Object.bsonsize() 메서드와 forEach()를 함께 활용하면 특정 조건에 일치하는 문서들의 총 크기를 바이트 단위로 손쉽게 계산할 수 있습니다. 이 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.
1단계: 문서가 포함된 컬렉션 생성
먼저 insertOne() 메서드를 사용해 문서가 담긴 컬렉션을 생성합니다.
> db.mongoDBCollectionSizeDemo.insertOne({"Name":"John", "Age":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cf23e3db64a577be5a2bc16")
}
> db.mongoDBCollectionSizeDemo.insertOne({"Name":"Chris", "Age":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cf23e45b64a577be5a2bc17")
}
> db.mongoDBCollectionSizeDemo.insertOne({"Name":"Robert", "Age":26});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cf23e4db64a577be5a2bc18")
}위 명령은 John, Chris, Robert 세 개의 문서를 mongoDBCollectionSizeDemo 컬렉션에 차례대로 삽입합니다.
2단계: find()로 모든 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.mongoDBCollectionSizeDemo.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5cf23e3db64a577be5a2bc16"), "Name" : "John", "Age" : 23 }
{ "_id" : ObjectId("5cf23e45b64a577be5a2bc17"), "Name" : "Chris", "Age" : 24 }
{ "_id" : ObjectId("5cf23e4db64a577be5a2bc18"), "Name" : "Robert", "Age" : 26 }3단계: 조건을 사용해 컬렉션 크기 계산하기
이제 조건(Name: 'Robert')에 일치하는 문서의 크기를 구해 보겠습니다. find()로 조건에 맞는 문서를 가져온 뒤, forEach()로 각 문서를 순회하면서 Object.bsonsize()로 문서의 바이트 크기를 누적하는 방식입니다.
> var collectionsize = 0;
> db.mongoDBCollectionSizeDemo.find({Name:'Robert'}).forEach(function(d) {
var s = Object.bsonsize(d);
collectionsize = collectionsize + s;
})
> print(collectionsize);
실행 결과는 다음과 같습니다.
52
동작 원리 정리
이 코드의 핵심 동작 방식은 다음과 같습니다.
1. 변수 collectionsize를 0으로 초기화하여 크기의 누적값을 저장할 준비를 합니다.
2. find({Name:'Robert'})로 조건에 일치하는 문서만 필터링합니다.
3. forEach()가 일치하는 각 문서를 하나씩 순회하며, Object.bsonsize(d)가 해당 문서의 BSON 직렬화 크기를 바이트 단위로 반환합니다.
4. 반환된 값을 collectionsize에 더해 최종 합계를 구하고, print()로 출력합니다.
이 방식은 단일 문서가 아니라 조건에 맞는 여러 문서의 총 크기를 구할 때 특히 유용하며, 스토리지 용량 분석이나 데이터 마이그레이션 계획 수립 시 참고할 수 있는 유용한 기법입니다.