MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB Object.bsonSize()


No MongoDB, você pode usar o Object.bsonSize() método para retornar o tamanho de um documento em bytes.

Exemplo


Suponha que tenhamos uma coleção chamada bars com o seguinte 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 o location campo contém um documento. E as reviews campo contém uma matriz de documentos.

Primeiro, vamos usar o Object.bsonSize() método para retornar o tamanho do documento de nível superior.
Object.bsonsize(db.bars.findOne())

Resultado:
502

Podemos ver que todo o documento tem 502 bytes.

Observe que estou usando findOne() e não find() . A razão para isso é que find() retorna um cursor, em vez do próprio documento. O findOne() O método, por outro lado, retorna o documento real e, portanto, seus resultados devem ser precisos.

Subdocumentos


Vamos usar Object.bsonSize() para verificar o tamanho do location campo.

Podemos usar a notação de ponto para obter o valor do location campo:
Object.bsonsize(
  db.bars.findOne().location
  )

Resultado:
61

Nesse caso, o documento tem 61 bytes.

Só para ter certeza, aqui está o que realmente passamos para o Object.bsonSize() método:
db.bars.findOne().location

Resultado:
{
	"type" : "Point",
	"coordinates" : [
		-16.919297718553366,
		145.77675259719823
	]
}

Então esse é o documento que tem 61 bytes.

Documentos em matrizes


Também podemos recuperar o tamanho dos documentos que são elementos de um array.

Exemplo:
Object.bsonsize(
  db.bars.findOne().reviews[0]
  )

Resultado:
91

As matrizes do MongoDB são baseadas em zero, portanto, este documento é a primeira revisão.

Podemos executar o argumento sozinho para ver todo o documento:
db.bars.findOne().reviews[0]

Resultado:
{
	"name" : "Steve",
	"date" : "20 December, 2020",
	"rating" : 5,
	"comments" : "Great vibe."
}

Projeções


Podemos usar o Object.bsonSize() método para retornar o tamanho do documento retornado por uma projeção. Para fazer isso, basta fornecer a projeção em nossa consulta.

Exemplo:
Object.bsonsize(
    db.bars.findOne(
      {},
      {
        _id: 0,
        location: 1
      }
    )
)

Resultado:
76

Neste caso, temos um tamanho de 76.

Você deve ter notado que em nosso exemplo anterior, o location campo era de 61 bytes, mas agora é de 76.

O que está acontecendo?

Bem, quando usamos projeções, como neste exemplo, estamos retornando um documento externo que contém o location nome do campo, bem como seu valor.

Veja o que essa projeção retorna:
db.bars.findOne(
    {},
    {
      _id: 0,
      location: 1
    }
  )

Resultado:
{
	"location" : {
		"type" : "Point",
		"coordinates" : [
			-16.919297718553366,
			145.77675259719823
		]
	}
}

No entanto, em nosso exemplo anterior, nossa consulta foi assim:
db.bars.findOne().location

E retornou isso:
{
	"type" : "Point",
	"coordinates" : [
		-16.919297718553366,
		145.77675259719823
	]
}

Portanto, nosso exemplo de projeção retornou um documento maior, pois retornou tanto o nome do campo quanto o valor. E nosso exemplo anterior retornou um documento menor devido ao fato de que ele retornou apenas o valor.

Pipeline de agregação


Ao usar o pipeline de agregação, você pode usar o $bsonSize operador para obter o tamanho de um documento.

Você também pode usar o $binarySize operador para obter o tamanho de uma string ou conteúdo de valor binário em bytes.