Definição
- $bsonSize
- Retorna o tamanho em bytes de determinado documento (ou seja, bsontype - Object) quando codificado como BSON. Você pode usar- $bsonSizecomo alternativa ao método- bsonSize().- $bsonSizetem a seguinte sintaxe:- { $bsonSize: <object> } - O argumento pode ser qualquer expressão válida, desde que resolva para um objeto ou - null. Para mais informações sobre expressões, consulte Expressões.
Comportamento
Se o argumento for um objeto, a expressão retornará o tamanho do objeto em bytes quando o objeto for codificado como BSON.
Se o argumento for null, a expressão retornará null.
Se o argumento for resolvido em um tipo de dados que não seja um objeto ou null, $bsonSize gerará um erro.
Exemplos
Tamanhos de devolução de documentos
No mongosh, crie uma coleção de amostra denominada employees com os seguintes documentos:
 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."      }    } ]); 
A seguinte aggregation projects:
- O campo - name
- O campo - object_size, que utiliza- $bsonSizepara retornar o tamanho do documento em bytes. A variável- $$ROOTfaz referência ao documento que está sendo processado pelo pipeline no momento. Para saber mais sobre variáveis no pipeline de agregação, consulte Variáveis em expressões de agregação.
db.employees.aggregate([   {     "$project": {       "name": 1,       "object_size": { $bsonSize: "$$ROOT" }     }   } ]) 
A operação retorna o seguinte resultado:
{ "_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 } 
Retornar o tamanho combinado de todos os documentos de uma coleção
O pipeline a seguir retorna o tamanho combinado de todos os documentos na collection employees:
db.employees.aggregate([   {     "$group": {       "_id": null,       "combined_object_size": { $sum: { $bsonSize: "$$ROOT" } }     }   } ]) 
Quando você especifica um $group _id valor de nullou qualquer outro valor constante, o estágio $group calcula os valores acumulados para todos os documentos de entrada como um todo.
A operação utiliza o operador $sum para calcular o $bsonSize combinado de cada documento na coleção. A variável $$ROOT faz referência ao documento sendo processado pelo pipeline no momento. Para saber mais sobre variáveis no pipeline de agregação, consulte a página Variáveis em Expressões de agregação.
A operação retorna o seguinte resultado:
{ "_id" : null, "combined_object_size" : 789 } 
Documento de devolução com o maior campo especificado
O pipeline a seguir retorna o documento com o maior campo current_task em bytes:
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 } ]) 
- Primeira etapa
- O primeiro estágio do pipeline - projects:- O campo - name
- O campo - task_object_size, que utiliza- $bsonSizepara retornar o tamanho do campo- current_taskdo documento em bytes.
 - Este estágio produz os seguintes documentos para o próximo estágio: - { "_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 } 
- Segunda etapa
- O segundo estágio - sortsos documentos por- task_object_sizeem ordem decrescente.- Este estágio produz os seguintes documentos para o próximo estágio: - { "_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 } 
- Terceiro estágio
- O terceiro estágio - limitsos documentos de saída para retornar apenas o documento que aparece primeiro na ordem de classificação:- { "_id" : 2, "name" : "Bob", "task_object_size" : 152 }