In MongoDB können Sie Object.bsonSize()
verwenden Methode, um die Größe eines Dokuments in Bytes zurückzugeben.
Beispiel
Angenommen, wir haben eine Sammlung namens bars
mit folgendem Dokument:
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }, "categories" : [ "Bar", "Restaurant", "Hotel" ], "reviews" : [ { "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }, { "name" : "Lisa", "date" : "25 October, 2020", "rating" : 3, "comments" : "They just raised their prices :(" }, { "name" : "Kim", "date" : "21 October, 2020", "rating" : 4, "comments" : "Nice for Friday happy hour" } ] }
Wir können sehen, dass der location
Feld enthält ein Dokument. Und die reviews
Feld enthält ein Array von Dokumenten.
Lassen Sie uns zuerst Object.bsonSize()
verwenden Methode, um die Größe des Dokuments der obersten Ebene zurückzugeben.
Object.bsonsize(db.bars.findOne())
Ergebnis:
502
Wir können sehen, dass das gesamte Dokument 502 Byte groß ist.
Beachten Sie, dass ich findOne()
verwende und nicht find()
. Der Grund dafür ist find()
gibt statt des Dokuments selbst einen Cursor zurück. Das findOne()
-Methode hingegen gibt das eigentliche Dokument zurück und ihre Ergebnisse sollten daher korrekt sein.
Unterdokumente
Lassen Sie uns Object.bsonSize()
verwenden um die Größe der location
zu überprüfen Feld.
Wir können die Punktnotation verwenden, um den Wert von location
zu erhalten Feld:
Object.bsonsize(
db.bars.findOne().location
)
Ergebnis:
61
In diesem Fall ist das Dokument 61 Byte groß.
Nur um sicherzugehen, hier ist, was wir tatsächlich an Object.bsonSize()
übergeben haben Methode:
db.bars.findOne().location
Ergebnis:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Das ist also das Dokument mit 61 Byte.
Dokumente in Arrays
Wir können auch die Größe von Dokumenten abrufen, die Elemente eines Arrays sind.
Beispiel:
Object.bsonsize(
db.bars.findOne().reviews[0]
)
Ergebnis:
91
MongoDB-Arrays sind nullbasiert, daher ist dieses Dokument die erste Überprüfung.
Wir können das Argument selbst ausführen, um das gesamte Dokument zu sehen:
db.bars.findOne().reviews[0]
Ergebnis:
{ "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }
Projektionen
Wir können Object.bsonSize()
verwenden -Methode, um die Größe des von einer Projektion zurückgegebenen Dokuments zurückzugeben. Dazu müssen wir lediglich die Projektion in unserer Abfrage angeben.
Beispiel:
Object.bsonsize(
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
)
Ergebnis:
76
In diesem Fall erhalten wir eine Größe von 76.
Sie haben vielleicht bemerkt, dass in unserem vorherigen Beispiel der location
Feld war 61 Bytes, aber jetzt sind es 76.
Was ist los?
Nun, wenn wir wie in diesem Beispiel Projektionen verwenden, geben wir tatsächlich ein äußeres Dokument zurück, das den location
enthält Feldname sowie dessen Wert.
Diese Projektion gibt Folgendes zurück:
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
Ergebnis:
{ "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } }
In unserem früheren Beispiel verlief unsere Abfrage jedoch folgendermaßen:
db.bars.findOne().location
Und dies zurückgegeben:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Unser Projektionsbeispiel gab also ein größeres Dokument zurück, da es sowohl den Feldnamen als auch den Wert zurückgab. Und unser früheres Beispiel gab ein kleineres Dokument zurück, da es nur den Wert zurückgab.
Aggregationspipeline
Wenn Sie die Aggregationspipeline verwenden, können Sie $bsonSize
verwenden Operator, um die Größe eines Dokuments zu erhalten.
Sie können auch $binarySize
verwenden -Operator, um die Größe des Inhalts einer Zeichenfolge oder eines Binärwerts in Byte abzurufen.