Vanaf MongoDB 4.4 kunt u de $binarySize
. gebruiken aggregatiepijplijnoperator om de grootte van een bepaalde tekenreeks of binaire gegevenswaarde in bytes te retourneren.
Het accepteert elke geldige expressie zolang deze wordt omgezet in een tekenreeks of binaire gegevenswaarde. Het argument kan ook null
. zijn , in welk geval $binarySize
retourneert null
.
Voorbeeld
Stel dat we een verzameling hebben met de naam posts
met het volgende document:
{ "_id" : 1, "title" : "Hello World!", "body" : "This is a test post for the purposes of testing", "tags" : [ "html", "css", "sql", "xml" ], "status" : null }
We kunnen de $binarySize
. gebruiken operator om de grootte van verschillende velden te controleren.
Voorbeeld:
db.posts.aggregate([
{
$project: {
"titleSize": { $binarySize: "$title" },
"bodySize": { $binarySize: "$body" }
}
}
])
Resultaat:
{ "_id" : 1, "titleSize" : 12, "bodySize" : 47 }
In dit geval retourneren we de binaire grootte van de title
veld en de body
veld.
Null-waarden
Als de waarde van het gespecificeerde veld null
is , de $binarySize
operator retourneert null
.
Voorbeeld:
db.posts.aggregate([
{
$project: {
"statusSize": { $binarySize: "$status" }
}
}
])
Resultaat:
{ "_id" : 1, "statusSize" : null }
In dit geval is de status
veld in ons document is null
, en dus $binarySize
null
geretourneerd .
Verkeerde gegevenstypen
Zoals vermeld, $binarySize
accepteert elke geldige uitdrukking zolang deze wordt omgezet in een tekenreeks, een binaire gegevenswaarde of null
.
Hier is een voorbeeld van wat er gebeurt als u een uitdrukking opgeeft die wordt omgezet in een ander BSON-type:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: "$tags" }
}
}
])
Resultaat:
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 dit geval hebben we geprobeerd de grootte van een array te vinden, maar dat is niet een van de ondersteunde BSON-typen, dus we krijgen een foutmelding.
We kunnen echter nog steeds de grootte van afzonderlijke array-elementen krijgen (zolang ze een van de ondersteunde typen zijn).
Voorbeeld:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
Resultaat:
{ "_id" : 1, "tagsSize" : 4 }
In dit voorbeeld krijgen we de grootte van het eerste array-element (arrays zijn gebaseerd op nul, dus 0
verwijst naar het eerste element).
Documentformaat
MongoDB heeft ook de $bsonSize
operator, waarmee u de grootte van een document kunt krijgen.
Een andere manier om de grootte van een document te krijgen, is door de Object.bsonSize()
te gebruiken methode.