Se você precisar retornar o tamanho de um documento no MongoDB, você pode usar o seguinte:
- O
$bsonSizeoperador de pipeline de agregação - O
Object.bsonSize()método
Abaixo estão exemplos de cada abordagem.
Dados de amostra
Para os exemplos a seguir, usaremos uma coleção chamada
products com os seguintes documentos:{ "_id" : 1, "product" : { "name" : "Shirt - Short Sleeves", "color" : "White" } }
{ "_id" : 2, "product" : { "name" : "Cap", "color" : "Green" } }
{ "_id" : 3, "product" : { "name" : "Travel Pack", "color" : "Light Blue" } } Observe que cada campo do produto contém um documento incorporado.
Podemos retornar o tamanho de todo o documento ou apenas do objeto incorporado.
O $bsonSize Operador de pipeline de agregação
Podemos usar o
$bsonSize operador com o $$ROOT variável de sistema para obter o tamanho de todo o documento. O $$ROOT variável refere-se ao documento que está sendo processado no momento pelo pipeline. Exemplo:
db.products.aggregate([
{
$project: {
"rootSize": { $sum: { $bsonSize: "$$ROOT" } }
}
}
]) Resultado:
{ "_id" : 1, "rootSize" : 81 }
{ "_id" : 2, "rootSize" : 63 }
{ "_id" : 3, "rootSize" : 76 } Nesse caso, obtemos o tamanho de todos os documentos da coleção, mas você sempre pode filtrá-lo para apenas um documento ou alguns.
Para obter o tamanho dos documentos incorporados, podemos substituir o
$$ROOT variável com o nome do campo dos documentos. Exemplo:
db.products.aggregate([
{
$project: {
"documentSize": { $sum: { $bsonSize: "$product" } }
}
}
]) Resultado:
{ "_id" : 1, "documentSize" : 54 }
{ "_id" : 2, "documentSize" : 36 }
{ "_id" : 3, "documentSize" : 49 } Nesse caso, o nome do campo é
product e então usamos $product para se referir a esse campo. Veja MongoDB
$bsonSize para mais informações e exemplos. O Object.bsonSize() Método
O
Object.bsonSize() é outra maneira de obter o tamanho de um documento. Exemplo:
Object.bsonsize(
db.products.findOne()
) Resultado:
81
Este método retorna apenas o tamanho e nada mais.
Observe que eu usei o
findOne() método em vez do find() método. Eu fiz isso porque find() retorna apenas um cursor, enquanto findOne() retorna o documento real. Podemos obter o tamanho do documento incorporado anexando-o usando a notação de ponto:
Object.bsonsize(
db.products.findOne().product
) Resultado:
54
Podemos obter o tamanho do próximo documento especificando seu
_id como o argumento da consulta:Object.bsonsize(
db.products.findOne({_id:2}).product
) Resultado:
36
Veja MongoDB
Object.bsonSize() para mais informações e exemplos.