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