Definición
$bsonSizeDevuelve el tamaño en bytes de un documento determinado (es decir, bsontype
Object) cuando se codifica como BSON. Puede utilizar como alternativa$bsonSizealbsonSize()método.$bsonSizetiene la siguiente sintaxis:{ $bsonSize: <object> } El argumento puede ser cualquier expresión válida siempre que se resuelva en un objeto o
nullen. Para más información sobre expresiones, consulte Expresiones.
Comportamiento
Si el argumento es un objeto, la expresión devuelve el tamaño del objeto en bytes cuando el objeto está codificado como BSON.
Si el argumento es null, la expresión devuelve null.
Si el argumento se resuelve en un tipo de dato distinto de un objeto o, se genera un null $bsonSize error.
Ejemplos
Tamaños de devolución 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 projects agregación:
El campo
nameEl
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 de una colección
La siguiente canalización devuelve 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 se especifica un valor de $group _id null de, o cualquier otro valor constante, la etapa calcula valores acumulados para todos los documentos de entrada como un $group todo.
La operación utiliza el operador$sumpara calcular el valor$bsonSizecombinado de cada documento de la colección. La variable$$ROOThace 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 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
La siguiente canalización 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
projectspipeline:El campo
nameEl
task_object_sizecampo, que utiliza para devolver el tamaño del campo del$bsonSizedocumentocurrent_tasken bytes.
Esta etapa envía los siguientes documentos a 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 envía los siguientes documentos a 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 devuelve únicamente el documento que aparece primero en el orden de clasificación de los documentos de
limitssalida:{ "_id" : 2, "name" : "Bob", "task_object_size" : 152 }