Fra MongoDB 4.4 kan du bruge $binarySize
aggregeringspipeline-operator for at returnere størrelsen af en given streng eller binær dataværdis indhold i bytes.
Det accepterer ethvert gyldigt udtryk, så længe det løses til enten en streng eller binær dataværdi. Argumentet kan også være null
, i hvilket tilfælde $binarySize
returnerer null
.
Eksempel
Antag, at vi har en samling kaldet posts
med følgende dokument:
{ "_id" : 1, "title" : "Hello World!", "body" : "This is a test post for the purposes of testing", "tags" : [ "html", "css", "sql", "xml" ], "status" : null }
Vi kan bruge $binarySize
operatør for at kontrollere størrelsen af forskellige felter.
Eksempel:
db.posts.aggregate([
{
$project: {
"titleSize": { $binarySize: "$title" },
"bodySize": { $binarySize: "$body" }
}
}
])
Resultat:
{ "_id" : 1, "titleSize" : 12, "bodySize" : 47 }
I dette tilfælde returnerer vi den binære størrelse af title
feltet og body
felt.
Nul-værdier
Hvis det angivne felts værdi er null
, $binarySize
operatør vil returnere null
.
Eksempel:
db.posts.aggregate([
{
$project: {
"statusSize": { $binarySize: "$status" }
}
}
])
Resultat:
{ "_id" : 1, "statusSize" : null }
I dette tilfælde er status
feltet i vores dokument er null
, og så $binarySize
returnerede null
.
Forkerte datatyper
Som nævnt, $binarySize
accepterer ethvert gyldigt udtryk, så længe det løses til enten en streng, en binær dataværdi eller null
.
Her er et eksempel på, hvad der sker, hvis du angiver et udtryk, der løses til en anden BSON-type:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: "$tags" }
}
}
])
Resultat:
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
I dette tilfælde forsøgte vi at finde størrelsen på et array, men det er ikke en af de understøttede BSON-typer, så vi får en fejl.
Vi kan dog stadig få størrelsen på individuelle array-elementer (så længe de er en af de understøttede typer).
Eksempel:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
Resultat:
{ "_id" : 1, "tagsSize" : 4 }
I dette eksempel får vi størrelsen af det første array-element (arrays er nul-baserede, så 0
henviser til det første element).
Dokumentstørrelse
MongoDB har også $bsonSize
operator, som giver dig mulighed for at få størrelsen på et dokument.
En anden måde at få et dokuments størrelse på er at bruge Object.bsonSize()
metode.