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

2 maneiras de obter o tamanho de um documento no MongoDB


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.