$bsonSize (agregação)
Nesta página
Definição
$bsonSize
Retorna o tamanho em bytes de determinado documento (ou seja, bsontype
Object
) quando codificado como BSON. Você pode usar$bsonSize
como alternativa ao métodobsonSize()
.$bsonSize
tem 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$bsonSize
para retornar o tamanho do documento em bytes. A variável$$ROOT
faz 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 null
ou 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$bsonSize
para retornar o tamanho do campocurrent_task
do 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
sorts
os documentos portask_object_size
em 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
limits
os 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 }