sql >> Base de Datos >  >> NoSQL >> MongoDB

Objeto MongoDB.bsonSize()

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.