sql >> Base de Datos >  >> NoSQL >> MongoDB

2 formas de obtener el tamaño de un documento en MongoDB

Si necesita devolver el tamaño de un documento en MongoDB, puede usar lo siguiente:

  • El $bsonSize operador de tubería de agregación
  • El Object.bsonSize() método

A continuación se muestran ejemplos de cada enfoque.

Datos de muestra

Para los siguientes ejemplos, usaremos una colección llamada products con los siguientes 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 de producto contiene un documento incrustado.

Podemos devolver el tamaño de todo el documento, o solo el objeto incrustado.

El $bsonSize Operador de tubería de agregación

Podemos usar el $bsonSize operador con el $$ROOT variable del sistema para obtener el tamaño de todo el documento. El $$ROOT variable se refiere al documento que está siendo procesado actualmente por la canalización.

Ejemplo:

db.products.aggregate([
  {
    $project: {
      "rootSize": { $sum: { $bsonSize: "$$ROOT" } }
    }
  }
])

Resultado:

{ "_id" : 1, "rootSize" : 81 }
{ "_id" : 2, "rootSize" : 63 }
{ "_id" : 3, "rootSize" : 76 }

En este caso, obtenemos el tamaño de todos los documentos de la colección, pero siempre puede filtrarlo a uno o varios documentos.

Para obtener el tamaño de los documentos incrustados, podemos reemplazar $$ROOT variable con el nombre del campo de los documentos.

Ejemplo:

db.products.aggregate([
  {
    $project: {
      "documentSize": { $sum: { $bsonSize: "$product" } }
    }
  }
])

Resultado:

{ "_id" : 1, "documentSize" : 54 }
{ "_id" : 2, "documentSize" : 36 }
{ "_id" : 3, "documentSize" : 49 }

En este caso, el nombre del campo es product y entonces usamos $product para hacer referencia a ese campo.

Ver MongoDB $bsonSize para más información y ejemplos.

El Object.bsonSize() Método

El Object.bsonSize() El método es otra forma de obtener el tamaño de un documento.

Ejemplo:

Object.bsonsize(
    db.products.findOne()
)

Resultado:

81

Este método devuelve solo el tamaño y nada más.

Tenga en cuenta que utilicé findOne() método en lugar de find() método. Hice esto porque find() solo devuelve un cursor, mientras que findOne() devuelve el documento real.

Podemos obtener el tamaño del documento incrustado agregándolo usando la notación de puntos:

Object.bsonsize(
    db.products.findOne().product
)

Resultado:

54

Podemos obtener el tamaño del siguiente documento especificando su _id como argumento de consulta:

Object.bsonsize(
    db.products.findOne({_id:2}).product
)

Resultado:

36

Ver MongoDB Object.bsonSize() para más información y ejemplos.