문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

아들 크기(집계)

이 페이지의 내용

  • 정의
  • 행동
  • 예제
$bsonSize

BSON 으로 인코딩된 경우 지정된 문서(예: bsontype Object)의 크기를 바이트 단위로 반환합니다. bsonSize() 메서드 대신 $bsonSize 를 사용할 수 있습니다.

$bsonSize 의 구문은 다음과 같습니다:

{ $bsonSize: <object> }

인수는 객체 또는 null로 해석되는 한 유효한 표현식이 될 수 있습니다. 표현식에 대한 자세한 내용은 표현식 연산자를 참조하세요.

인수가 객체이면 이 표현식은 객체가 BSON으로 인코딩된 경우 객체의 크기를 바이트 단위로 반환합니다.

인수가 null 이면 표현식은 null 을 반환합니다.

인수가 객체 또는 null 이외의 데이터 유형으로 해석되면 $bsonSize 오류가 발생합니다.

mongosh 에서 다음 문서를 사용하여 employees 라는 이름의 샘플 컬렉션을 만듭니다.

db.employees.insertMany([
{
"_id": 1,
"name": "Alice", "email": "alice@company.com", "position": "Software Developer",
"current_task": {
"project_id": 1,
"project_name": "Aggregation Improvements",
"project_duration": 5,
"hours": 20
}
},
{
"_id": 2,
"name": "Bob", "email": "bob@company.com", "position": "Sales",
"current_task": {
"project_id": 2,
"project_name": "Write Blog Posts",
"project_duration": 2,
"hours": 10,
"notes": "Progress is slow. Waiting for feedback."
}
},
{
"_id": 3,
"name": "Charlie", "email": "charlie@company.com", "position": "HR (On Leave)",
"current_task": null
},
{
"_id": 4,
"name": "Dianne", "email": "diane@company.com", "position": "Web Designer",
"current_task": {
"project_id": 3,
"project_name": "Update Home Page",
"notes": "Need to scope this project."
}
}
]);

다음 애그리게이션 projects:

  • name 필드

  • object_size 필드는 $bsonSize 를 사용하여 문서의 크기를 바이트 단위로 반환합니다. $$ROOT 변수는 파이프라인에서 현재 처리 중인 문서를 참조합니다. 집계 파이프라인의 변수에 대해 자세히 알아보려면 애그리게이션 표현식의 변수를 참조하세요.

db.employees.aggregate([
{
"$project": {
"name": 1,
"object_size": { $bsonSize: "$$ROOT" }
}
}
])

이 연산은 다음과 같은 결과를 반환합니다.

{ "_id" : 1, "name" : "Alice", "object_size" : 222 }
{ "_id" : 2, "name" : "Bob", "object_size" : 248 }
{ "_id" : 3, "name" : "Charlie", "object_size" : 112 }
{ "_id" : 4, "name" : "Dianne", "object_size" : 207 }

다음 파이프라인은 employees 컬렉션 에 있는 모든 문서의 결합된 크기를 반환합니다.

db.employees.aggregate([
{
"$group": {
"_id": null,
"combined_object_size": { $sum: { $bsonSize: "$$ROOT" } }
}
}
])

null$group _id 값 또는 기타 상수 값을 지정하면 $group 단계는 모든 입력 문서에 대한 누적 값을 전체적으로 계산합니다.

이 작업은 $sum 연산자를 사용하여 컬렉션에 있는 각 문서의 결합된 $bsonSize 를 계산합니다. $$ROOT 변수는 파이프라인에서 현재 처리 중인 문서를 참조합니다. 집계 파이프라인의 변수에 대해 자세히 알아보려면 애그리게이션 표현식의 변수를 참조하세요.

이 연산은 다음과 같은 결과를 반환합니다.

{ "_id" : null, "combined_object_size" : 789 }

다음도 참조하세요.

다음 파이프라인은 current_task 필드가 가장 큰 문서를 바이트 단위로 반환합니다.

db.employees.aggregate([
// First Stage
{ $project: { name: "$name", task_object_size: { $bsonSize: "$current_task" } } },
// Second Stage
{ $sort: { "task_object_size" : -1 } },
// Third Stage
{ $limit: 1 }
])
첫 번째 단계

파이프라인 projects 의 첫 번째 단계입니다.

  • name 필드

  • task_object_size 필드는 $bsonSize 를 사용하여 문서의 current_task 필드 크기를 바이트 단위로 반환합니다.

이 단계에서는 다음 문서를 다음 단계로 출력합니다.

{ "_id" : 1, "name" : "Alice", "task_object_size" : 109 }
{ "_id" : 2, "name" : "Bob", "task_object_size" : 152 }
{ "_id" : 3, "name" : "Charlie", "task_object_size" : null }
{ "_id" : 4, "name" : "Dianne", "task_object_size" : 99 }
두 번째 단계

두 번째 단계에서는 문서를 task_object_size 씩 내림차순으로 sorts 처리합니다.

이 단계에서는 다음 문서를 다음 단계로 출력합니다.

{ "_id" : 2, "name" : "Bob", "task_object_size" : 152 }
{ "_id" : 1, "name" : "Alice", "task_object_size" : 109 }
{ "_id" : 4, "name" : "Dianne", "task_object_size" : 99 }
{ "_id" : 3, "name" : "Charlie", "task_object_size" : null }
세 번째 단계

세 번째 단계에서는 출력 문서를 limits 처리하여 정렬 순서에서 처음에 나타나는 문서만 반환합니다.

{ "_id" : 2, "name" : "Bob", "task_object_size" : 152 }

← bottomN(집계 누산기)

이 페이지의 내용