Docs Menu
Docs Home
/ /
Operadores de tuberías de agregación

$bsonSize (operador de expresión)

$bsonSize

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

$bsonSize tiene la siguiente sintaxis:

{ $bsonSize: <object> }

El argumento puede ser cualquier expresión válida siempre que se resuelva en un objeto o null en. Para más información sobre expresiones, consulte Expresiones.

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.

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:

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 }

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 }

Tip

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 projects pipeline:

  • 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 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 sorts los documentos por task_object_size en 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 limits salida:

{ "_id" : 2, "name" : "Bob", "task_object_size" : 152 }

Volver

$bottomN

En esta página