Se você precisar retornar o tamanho de um documento no MongoDB, você pode usar o seguinte:
- O
$bsonSize
operador 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.