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.