Definición
$bsonSizeDevuelve el tamaño en bytes de un documento dado (es decir, bsontype
Object) cuando se codifica como BSON. Puedes utilizar$bsonSizecomo alternativa al métodobsonSize().$bsonSizetiene la siguiente sintaxis:{ $bsonSize: <object> } El argumento puede ser cualquier expresión válida, siempre que se resuelva a un objeto o
null. Para más información sobre expresiones, consulta Expresiones.
Comportamiento
Si el argumento es un objeto, la expresión devuelve el tamaño del objeto en bytes cuando el objeto se codifica como BSON.
Si el argumento es null, la expresión devuelve null.
Si el argumento se resuelve en un tipo de dato que no sea un objeto o null, $bsonSize da error.
Ejemplos
Devolver tamaños de documentos
En mongosh, cree una colección de muestra llamada employees con los siguientes 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." } } ]);
La siguiente agregación projects:
El campo
name.El
object_sizecampo, que utiliza para devolver el tamaño$bsonSizedel documento en bytes. La variable hace referencia al documento que la canalización está procesando actualmente. Para obtener más información sobre las variables en la canalización de agregación, consulte Variables$$ROOTen expresiones de agregación.
db.employees.aggregate([ { "$project": { "name": 1, "object_size": { $bsonSize: "$$ROOT" } } } ])
La operación devuelve el siguiente 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 }
Devolver el tamaño combinado de todos los documentos en una colección
El siguiente pipeline retorna el tamaño combinado de todos los documentos en la colección employees:
db.employees.aggregate([ { "$group": { "_id": null, "combined_object_size": { $sum: { $bsonSize: "$$ROOT" } } } } ])
Cuando especificas un valor $group _id de null o cualquier otro valor constante, la etapa $group calcula los valores acumulados para todos los documentos de entrada en conjunto.
La operación utiliza el operador $sum para calcular el $bsonSize combinado de cada documento de la colección. La variable $$ROOT hace referencia al documento que actualmente está siendo procesado por la pipeline. Para obtener más información sobre las variables en la canalización de agregación, consulta Variables en expresiones de agregación.
La operación devuelve el siguiente resultado:
{ "_id" : null, "combined_object_size" : 789 }
Retornar Documento con el Campo Especificado Más Grande
El siguiente pipeline devuelve el documento con el campo current_task más grande en 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 } ])
- Primera etapa
La primera etapa del pipeline
projects:El campo
name.El
task_object_sizecampo, que utiliza para devolver el tamaño del campo del$bsonSizedocumentocurrent_tasken bytes.
Esta etapa produce los siguientes documentos para la siguiente etapa:
{ "_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
La segunda etapa
sortslos documentos portask_object_sizeen orden descendente.Esta etapa produce los siguientes documentos para la siguiente etapa:
{ "_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 } - Tercera etapa
La tercera etapa
limitslos documentos de salida para solo devolver el documento que aparece primero en el orden de clasificación:{ "_id" : 2, "name" : "Bob", "task_object_size" : 152 }