MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

2 modi per ottenere le dimensioni di un documento in MongoDB

Se devi restituire le dimensioni di un documento in MongoDB, puoi utilizzare quanto segue:

  • Il $bsonSize operatore della pipeline di aggregazione
  • Il Object.bsonSize() metodo

Di seguito sono riportati esempi di ciascun approccio.

Dati di esempio

Per i seguenti esempi, utilizzeremo una raccolta chiamata products con i seguenti documenti:

{ "_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" } }

Si noti che ogni campo prodotto contiene un documento incorporato.

Possiamo restituire la dimensione dell'intero documento o solo dell'oggetto incorporato.

Il $bsonSize Operatore di condotte di aggregazione

Possiamo usare il $bsonSize operatore con il $$ROOT variabile di sistema per ottenere la dimensione dell'intero documento. Il $$ROOT variabile si riferisce al documento attualmente in fase di elaborazione dalla pipeline.

Esempio:

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

Risultato:

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

In questo caso otteniamo la dimensione di tutti i documenti nella raccolta, ma puoi sempre filtrarla su uno o più documenti.

Per ottenere le dimensioni dei documenti incorporati, possiamo sostituire $$ROOT variabile con il nome del campo dei documenti.

Esempio:

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

Risultato:

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

In questo caso, il nome del campo è product e quindi usiamo $product per fare riferimento a quel campo.

Vedi MongoDB $bsonSize per ulteriori informazioni ed esempi.

Il Object.bsonSize() Metodo

Il Object.bsonSize() è un altro modo per ottenere le dimensioni di un documento.

Esempio:

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

Risultato:

81

Questo metodo restituisce solo la dimensione e non di più.

Nota che ho usato findOne() metodo invece di find() metodo. L'ho fatto perché find() restituisce solo un cursore, mentre findOne() restituisce il documento vero e proprio.

Possiamo ottenere la dimensione del documento incorporato aggiungendolo usando la notazione del punto:

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

Risultato:

54

Possiamo ottenere la dimensione del documento successivo specificando il suo _id come argomento della query:

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

Risultato:

36

Vedi MongoDB Object.bsonSize() per ulteriori informazioni ed esempi.