Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Operadores de pipeline de agregación

$bsonSize (operador de expresión)

$bsonSize

Devuelve el tamaño en bytes de un documento dado (es decir, bsontype Object) cuando se codifica como BSON. Puedes utilizar $bsonSize como alternativa al método bsonSize().

$bsonSize tiene 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.

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.

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:

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 }

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 }

Tip

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_size campo, que utiliza para devolver el tamaño del campo del $bsonSize documento current_task en 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 sorts los documentos por task_object_size en 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 limits los 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 }

Volver

$bottomN

En esta página