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 :
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 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.