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 :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:618:17
example@sqldat.com/mongo/shell/assert.js:708:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/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.