Ab MongoDB 4.4 können Sie $binarySize
verwenden Aggregations-Pipeline-Operator, um die Größe einer bestimmten Zeichenfolge oder des Inhalts eines binären Datenwerts in Bytes zurückzugeben.
Es akzeptiert jeden gültigen Ausdruck, solange er sich entweder in eine Zeichenfolge oder einen binären Datenwert auflöst. Das Argument kann auch null
sein , in diesem Fall $binarySize
gibt null
zurück .
Beispiel
Angenommen, wir haben eine Sammlung namens posts
mit folgendem Dokument:
{ "_id" : 1, "title" : "Hello World!", "body" : "This is a test post for the purposes of testing", "tags" : [ "html", "css", "sql", "xml" ], "status" : null }
Wir können die $binarySize
verwenden Operator, um die Größe verschiedener Felder zu überprüfen.
Beispiel:
db.posts.aggregate([
{
$project: {
"titleSize": { $binarySize: "$title" },
"bodySize": { $binarySize: "$body" }
}
}
])
Ergebnis:
{ "_id" : 1, "titleSize" : 12, "bodySize" : 47 }
In diesem Fall geben wir die binäre Größe des title
zurück Feld und den body
Feld.
Nullwerte
Wenn der Wert des angegebenen Felds null
ist , die $binarySize
Der Operator gibt null
zurück .
Beispiel:
db.posts.aggregate([
{
$project: {
"statusSize": { $binarySize: "$status" }
}
}
])
Ergebnis:
{ "_id" : 1, "statusSize" : null }
In diesem Fall der status
Feld in unserem Dokument ist null
, und so $binarySize
gab null
zurück .
Falsche Datentypen
Wie bereits erwähnt, $binarySize
akzeptiert jeden gültigen Ausdruck, solange er sich entweder in einen String, einen binären Datenwert oder null
auflöst .
Hier ist ein Beispiel dafür, was passiert, wenn Sie einen Ausdruck angeben, der in einen anderen BSON-Typ aufgelöst wird:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: "$tags" }
}
}
])
Ergebnis:
Error: command failed: { "ok" : 0, "errmsg" : "$binarySize requires a string or BinData argument, found: array", "code" : 51276, "codeName" : "Location51276" } : aggregate failed : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/assert.js:18:14 [email protected]/mongo/shell/assert.js:618:17 [email protected]/mongo/shell/assert.js:708:16 [email protected]/mongo/shell/db.js:266:5 [email protected]/mongo/shell/collection.js:1046:12 @(shell):1:1
In diesem Fall haben wir versucht, die Größe eines Arrays zu finden, aber das ist keiner der unterstützten BSON-Typen, also erhalten wir eine Fehlermeldung.
Wir können jedoch immer noch die Größe einzelner Array-Elemente ermitteln (solange sie zu den unterstützten Typen gehören).
Beispiel:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
Ergebnis:
{ "_id" : 1, "tagsSize" : 4 }
In diesem Beispiel erhalten wir die Größe des ersten Array-Elements (Arrays sind nullbasiert, also 0
bezieht sich auf das erste Element).
Dokumentgröße
MongoDB hat auch die $bsonSize
-Operator, mit dem Sie die Größe eines Dokuments ermitteln können.
Eine andere Möglichkeit, die Größe eines Dokuments zu erhalten, ist die Verwendung von Object.bsonSize()
Methode.