En MongoDB, puede usar Object.bsonSize()
método para devolver el tamaño de un documento en bytes.
Ejemplo
Supongamos que tenemos una colección llamada bars
con el siguiente documento:
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }, "categories" : [ "Bar", "Restaurant", "Hotel" ], "reviews" : [ { "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }, { "name" : "Lisa", "date" : "25 October, 2020", "rating" : 3, "comments" : "They just raised their prices :(" }, { "name" : "Kim", "date" : "21 October, 2020", "rating" : 4, "comments" : "Nice for Friday happy hour" } ] }
Podemos ver que la location
campo contiene un documento. Y las reviews
El campo contiene una serie de documentos.
Primero, usemos el Object.bsonSize()
método para devolver el tamaño del documento de nivel superior.
Object.bsonsize(db.bars.findOne())
Resultado:
502
Podemos ver que todo el documento tiene 502 bytes.
Tenga en cuenta que estoy usando findOne()
y no find()
. La razón de esto es que find()
devuelve un cursor, en lugar del documento en sí. El findOne()
El método, por otro lado, devuelve el documento real y, por lo tanto, sus resultados deberían ser precisos.
Subdocumentos
Usemos Object.bsonSize()
para verificar el tamaño de la location
campo.
Podemos usar la notación de puntos para obtener el valor de la location
campo:
Object.bsonsize(
db.bars.findOne().location
)
Resultado:
61
En este caso, el documento es de 61 bytes.
Solo para estar seguros, esto es lo que realmente pasamos al Object.bsonSize()
método:
db.bars.findOne().location
Resultado:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Así que ese es el documento que tiene 61 bytes.
Documentos en matrices
También podemos recuperar el tamaño de los documentos que son elementos de una matriz.
Ejemplo:
Object.bsonsize(
db.bars.findOne().reviews[0]
)
Resultado:
91
Los arreglos de MongoDB están basados en cero, por lo que este documento es la primera revisión.
Podemos ejecutar el argumento por sí mismo para ver el documento completo:
db.bars.findOne().reviews[0]
Resultado:
{ "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }
Proyecciones
Podemos usar el Object.bsonSize()
método para devolver el tamaño del documento devuelto por una proyección. Para hacer esto, simplemente necesitamos proporcionar la proyección en nuestra consulta.
Ejemplo:
Object.bsonsize(
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
)
Resultado:
76
En este caso, obtenemos una talla 76.
Es posible que haya notado que en nuestro ejemplo anterior, la location
el campo tenía 61 bytes, pero ahora tiene 76.
¿Qué está pasando?
Bueno, cuando usamos proyecciones, como en este ejemplo, en realidad estamos devolviendo un documento externo que contiene la location
nombre del campo así como su valor.
Esto es lo que devuelve esta proyección:
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
Resultado:
{ "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } }
Sin embargo, en nuestro ejemplo anterior, nuestra consulta fue así:
db.bars.findOne().location
Y devolvió esto:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Entonces, nuestro ejemplo de proyección devolvió un documento más grande, debido al hecho de que devolvió tanto el nombre del campo como el valor. Y nuestro ejemplo anterior devolvió un documento más pequeño debido al hecho de que solo devolvió el valor.
Canalización de agregación
Al usar la canalización de agregación, puede usar el $bsonSize
operador para obtener el tamaño de un documento.
También puede usar el $binarySize
operador para obtener el tamaño de una cadena o el contenido de un valor binario en bytes.