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

MongoDB $binarySize

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.