Från MongoDB 4.4 kan du använda $binarySize
aggregeringspipeline-operator för att returnera storleken på en given sträng eller binärt datavärdes innehåll i byte.
Den accepterar vilket giltigt uttryck som helst så länge det löser sig till antingen en sträng eller ett binärt datavärde. Argumentet kan också vara null
, i så fall $binarySize
returnerar null
.
Exempel
Anta att vi har en samling som heter posts
med följande 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 använda $binarySize
operatör för att kontrollera storleken på olika fält.
Exempel:
db.posts.aggregate([
{
$project: {
"titleSize": { $binarySize: "$title" },
"bodySize": { $binarySize: "$body" }
}
}
])
Resultat:
{ "_id" : 1, "titleSize" : 12, "bodySize" : 47 }
I det här fallet returnerar vi den binära storleken för title
fältet och body
fältet.
Nullvärden
Om det angivna fältets värde är null
, $binarySize
operatören returnerar null
.
Exempel:
db.posts.aggregate([
{
$project: {
"statusSize": { $binarySize: "$status" }
}
}
])
Resultat:
{ "_id" : 1, "statusSize" : null }
I det här fallet, status
fältet i vårt dokument är null
, och så $binarySize
returnerade null
.
Fel datatyper
Som nämnts, $binarySize
accepterar alla giltiga uttryck så länge det löser sig till antingen en sträng, ett binärt datavärde eller null
.
Här är ett exempel på vad som händer om du tillhandahåller ett uttryck som löser sig till en annan BSON-typ:
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 det här fallet försökte vi hitta storleken på en array, men det är inte en av de BSON-typer som stöds, så vi får ett felmeddelande.
Vi kan dock fortfarande få storleken på enskilda matriselement (så länge de är en av de stödda typerna).
Exempel:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
Resultat:
{ "_id" : 1, "tagsSize" : 4 }
I det här exemplet får vi storleken på det första matriselementet (matriser är nollbaserade, så 0
hänvisar till det första elementet).
Dokumentstorlek
MongoDB har också $bsonSize
operator, som gör att du kan få storleken på ett dokument.
Ett annat sätt att få ett dokuments storlek är att använda Object.bsonSize()
metod.