MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

2 Möglichkeiten, die Größe eines Dokuments in MongoDB zu ermitteln

Wenn Sie die Größe eines Dokuments in MongoDB zurückgeben müssen, können Sie Folgendes verwenden:

  • Die $bsonSize Aggregation-Pipeline-Betreiber
  • Die Object.bsonSize() Methode

Nachfolgend finden Sie Beispiele für jeden Ansatz.

Beispieldaten

Für die folgenden Beispiele verwenden wir eine Sammlung namens products mit folgenden Dokumenten:

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

Beachten Sie, dass jedes Produktfeld ein eingebettetes Dokument enthält.

Wir können die Größe des gesamten Dokuments oder nur des eingebetteten Objekts zurückgeben.

Die $bsonSize Betreiber der Aggregationspipeline

Wir können die $bsonSize verwenden Operator mit dem $$ROOT Systemvariable, um die Größe des gesamten Dokuments zu erhalten. Der $$ROOT bezieht sich auf das Dokument, das gerade von der Pipeline verarbeitet wird.

Beispiel:

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

Ergebnis:

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

In diesem Fall erhalten wir die Größe aller Dokumente in der Sammlung, aber Sie können sie immer auf nur ein oder mehrere Dokumente filtern.

Um die Größe der eingebetteten Dokumente zu erhalten, können wir $$ROOT ersetzen Variable mit dem Feldnamen der Dokumente.

Beispiel:

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

Ergebnis:

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

In diesem Fall lautet der Feldname product und so verwenden wir $product um auf dieses Feld zu verweisen.

Siehe MongoDB $bsonSize für weitere Informationen und Beispiele.

Die Object.bsonSize() Methode

Das Object.bsonSize() -Methode ist eine weitere Möglichkeit, die Größe eines Dokuments zu ermitteln.

Beispiel:

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

Ergebnis:

81

Diese Methode gibt nur die Größe zurück und nicht mehr.

Beachten Sie, dass ich findOne() verwendet habe Methode anstelle von find() Methode. Ich habe das gemacht, weil find() gibt nur einen Cursor zurück, wohingegen findOne() gibt das eigentliche Dokument zurück.

Wir können die Größe des eingebetteten Dokuments ermitteln, indem wir es in Punktnotation anhängen:

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

Ergebnis:

54

Wir können die Größe des nächsten Dokuments erhalten, indem wir seine _id angeben als Abfrageargument:

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

Ergebnis:

36

Siehe MongoDB Object.bsonSize() für weitere Informationen und Beispiele.