MongoDB에서 가장 큰 문서 크기를 찾는 방법
MongoDB에서 컬렉션에 저장된 문서 중 가장 큰 문서의 크기를 확인하려면 셸(mongo shell)에서 스크립트를 작성해야 합니다. 핵심은 Object.bsonsize() 메서드입니다. 이 메서드는 특정 문서가 BSON 형식으로 직렬화되었을 때 차지하는 실제 바이트 크기를 반환하므로, 각 문서의 크기를 정확하게 비교할 수 있습니다.
1. 샘플 컬렉션 생성하기
개념을 이해하기 위해 먼저 문서가 포함된 컬렉션을 생성해 보겠습니다. 아래 쿼리를 실행하여 세 개의 문서를 순차적으로 삽입합니다.
> db.largestDocumentDemo.insertOne({"StudentName":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ed2e32f684a30fbdfd57d")
}
> db.largestDocumentDemo.insertOne({"StudentName":"Carol","StudentAge":22,"StudentCountryName":"US","TechnicalSubject":["C","C++","Java","MySQL"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ed3282f684a30fbdfd57e")
}
> db.largestDocumentDemo.insertOne({"StudentName":"Mike","StudentAge":22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ed3382f684a30fbdfd57f")
}find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있으며, pretty()를 함께 사용하면 들여쓰기가 적용된 가독성 좋은 형태로 출력됩니다.
> db.largestDocumentDemo.find().pretty();
위 쿼리의 출력 결과는 다음과 같습니다.
{ "_id" : ObjectId("5c8ed2e32f684a30fbdfd57d"), "StudentName" : "John" }
{
"_id" : ObjectId("5c8ed3282f684a30fbdfd57e"),
"StudentName" : "Carol",
"StudentAge" : 22,
"StudentCountryName" : "US",
"TechnicalSubject" : [
"C",
"C++",
"Java",
"MySQL"
]
}
{
"_id" : ObjectId("5c8ed3382f684a30fbdfd57f"),
"StudentName" : "Mike",
"StudentAge" : 22
}2. 가장 큰 문서 크기를 구하는 스크립트 작성
이제 find()로 모든 문서를 순회하면서 각 문서의 크기를 비교하는 스크립트를 작성합니다. forEach() 루프 안에서 Object.bsonsize()로 현재 문서의 크기를 구하고, 지금까지 확인한 최대값보다 크면 변수를 갱신하는 방식입니다.
> var largestDocumentSize = 0;
> db.largestDocumentDemo.find().forEach(function(myObject) {
... var currentDocumentSize = Object.bsonsize(myObject);
... if(largestDocumentSize < currentDocumentSize ) {
... largestDocumentSize = currentDocumentSize ;
... }
... });
> print('가장 큰 문서 크기 = ' + largestDocumentSize);
스크립트를 실행하면 가장 큰 문서의 크기가 다음과 같이 출력됩니다.
가장 큰 문서 크기 = 160
결과를 보면 StudentName, StudentAge, StudentCountryName, TechnicalSubject 필드를 모두 포함하고 있는 Carol의 문서가 160바이트로 가장 큰 것을 확인할 수 있습니다. 참고로 MongoDB의 단일 문서 크기 제한은 16MB이므로, 대용량 데이터를 다루는 환경에서는 이 방법을 활용해 문서 크기를 사전에 점검해 두는 것이 좋습니다.