MongoDB에서 쿼리에 포함된 모든 문서의 크기 구하기
MongoDB에서 하나의 쿼리에 포함된 모든 문서의 전체 크기를 구하려면 커서를 순회하면서 각 문서의 크기를 개별적으로 계산한 뒤 합산해야 합니다. 이때 Object.bsonsize() 메서드를 활용하면 각 문서가 실제로 차지하는 BSON 바이트 크기를 정확하게 알 수 있습니다.
먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.sizeOfAllDocumentsDemo.insertOne({"StudentFirstName":"John","StudentSubject":["MongoDB","Java"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd3c0c1edc6604c74817cd7")
}
> db.sizeOfAllDocumentsDemo.insertOne({"StudentFirstName":"Larry","StudentSubject":["MySQL","PHP"],"StudentAge":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd3c0d9edc6604c74817cd8")
}
> db.sizeOfAllDocumentsDemo.insertOne({"StudentFirstName":"Chris","StudentSubject":["SQL Server","C#"],"StudentAge":23,"StudentCountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd3c0fbedc6604c74817cd9")
}컬렉션의 모든 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.sizeOfAllDocumentsDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
{
"_id" : ObjectId("5cd3c0c1edc6604c74817cd7"),
"StudentFirstName" : "John",
"StudentSubject" : [
"MongoDB",
"Java"
]
}
{
"_id" : ObjectId("5cd3c0d9edc6604c74817cd8"),
"StudentFirstName" : "Larry",
"StudentSubject" : [
"MySQL",
"PHP"
],
"StudentAge" : 21
}
{
"_id" : ObjectId("5cd3c0fbedc6604c74817cd9"),
"StudentFirstName" : "Chris",
"StudentSubject" : [
"SQL Server",
"C#"
],
"StudentAge" : 23,
"StudentCountryName" : "US"
}모든 문서의 크기를 합산하는 쿼리
이제 find()로 가져온 커서를 forEach()로 순회하면서 각 문서의 BSON 크기를 누적합시다. 카운터 변수를 초기화한 후 반복문 안에서 Object.bsonsize()를 호출하면 됩니다.
> var allDocument = db.sizeOfAllDocumentsDemo.find();
> var counter = 0;
> allDocument.forEach(
... function(myDocument) {
... counter = counter + Object.bsonsize(myDocument)
... }
... );
> print(counter);위 코드를 실행하면 쿼리 결과에 포함된 모든 문서의 총 크기(바이트 단위)가 출력됩니다.
358
결과적으로 세 개의 문서가 차지하는 전체 크기는 358바이트입니다. 참고로 Object.bsonsize()는 문서가 MongoDB 내부에서 BSON 형식으로 저장될 때의 실제 크기를 반환하기 때문에, 스토리지 용량 추정이나 16MB 문서 크기 제한 점검 등에 유용하게 활용할 수 있습니다.