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.