Si necesita devolver el tamaño de un documento en MongoDB, puede usar lo siguiente:
- El
$bsonSize
operador de tubería de agregación - El
Object.bsonSize()
método
A continuación se muestran ejemplos de cada enfoque.
Datos de muestra
Para los siguientes ejemplos, usaremos una colección llamada products
con los siguientes documentos:
{ "_id" : 1, "product" : { "name" : "Shirt - Short Sleeves", "color" : "White" } } { "_id" : 2, "product" : { "name" : "Cap", "color" : "Green" } } { "_id" : 3, "product" : { "name" : "Travel Pack", "color" : "Light Blue" } }
Observe que cada campo de producto contiene un documento incrustado.
Podemos devolver el tamaño de todo el documento, o solo el objeto incrustado.
El $bsonSize
Operador de tubería de agregación
Podemos usar el $bsonSize
operador con el $$ROOT
variable del sistema para obtener el tamaño de todo el documento. El $$ROOT
variable se refiere al documento que está siendo procesado actualmente por la canalización.
Ejemplo:
db.products.aggregate([
{
$project: {
"rootSize": { $sum: { $bsonSize: "$$ROOT" } }
}
}
])
Resultado:
{ "_id" : 1, "rootSize" : 81 } { "_id" : 2, "rootSize" : 63 } { "_id" : 3, "rootSize" : 76 }
En este caso, obtenemos el tamaño de todos los documentos de la colección, pero siempre puede filtrarlo a uno o varios documentos.
Para obtener el tamaño de los documentos incrustados, podemos reemplazar $$ROOT
variable con el nombre del campo de los documentos.
Ejemplo:
db.products.aggregate([
{
$project: {
"documentSize": { $sum: { $bsonSize: "$product" } }
}
}
])
Resultado:
{ "_id" : 1, "documentSize" : 54 } { "_id" : 2, "documentSize" : 36 } { "_id" : 3, "documentSize" : 49 }
En este caso, el nombre del campo es product
y entonces usamos $product
para hacer referencia a ese campo.
Ver MongoDB $bsonSize
para más información y ejemplos.
El Object.bsonSize()
Método
El Object.bsonSize()
El método es otra forma de obtener el tamaño de un documento.
Ejemplo:
Object.bsonsize(
db.products.findOne()
)
Resultado:
81
Este método devuelve solo el tamaño y nada más.
Tenga en cuenta que utilicé findOne()
método en lugar de find()
método. Hice esto porque find()
solo devuelve un cursor, mientras que findOne()
devuelve el documento real.
Podemos obtener el tamaño del documento incrustado agregándolo usando la notación de puntos:
Object.bsonsize(
db.products.findOne().product
)
Resultado:
54
Podemos obtener el tamaño del siguiente documento especificando su _id
como argumento de consulta:
Object.bsonsize(
db.products.findOne({_id:2}).product
)
Resultado:
36
Ver MongoDB Object.bsonSize()
para más información y ejemplos.