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.