Od MongoDB 4.4 můžete použít $binarySize operátor agregačního kanálu, který vrátí velikost daného řetězce nebo obsahu binární datové hodnoty v bajtech.
Přijímá jakýkoli platný výraz, pokud se překládá na hodnotu řetězce nebo binárních dat. Argument může být také null , v takovém případě $binarySize vrátí null .
Příklad
Předpokládejme, že máme kolekci nazvanou posts s následujícím dokumentem:
{
"_id" : 1,
"title" : "Hello World!",
"body" : "This is a test post for the purposes of testing",
"tags" : [
"html",
"css",
"sql",
"xml"
],
"status" : null
}
Můžeme použít $binarySize operátor pro kontrolu velikosti různých polí.
Příklad:
db.posts.aggregate([
{
$project: {
"titleSize": { $binarySize: "$title" },
"bodySize": { $binarySize: "$body" }
}
}
]) Výsledek:
{ "_id" : 1, "titleSize" : 12, "bodySize" : 47 }
V tomto případě vrátíme binární velikost title pole a body pole.
Nulové hodnoty
Pokud je hodnota zadaného pole null , $binarySize operátor vrátí null .
Příklad:
db.posts.aggregate([
{
$project: {
"statusSize": { $binarySize: "$status" }
}
}
]) Výsledek:
{ "_id" : 1, "statusSize" : null }
V tomto případě status pole v našem dokumentu je null , a tak $binarySize vrátil null .
Chybné datové typy
Jak již bylo zmíněno, $binarySize přijímá jakýkoli platný výraz, pokud se překládá buď na řetězec, binární datovou hodnotu nebo null .
Zde je příklad toho, co se stane, když zadáte výraz, který se převede na jiný typ BSON:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: "$tags" }
}
}
]) Výsledek:
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 V tomto případě jsme se pokusili najít velikost pole, ale to není jeden z podporovaných typů BSON, takže se zobrazí chyba.
Stále však můžeme získat velikost jednotlivých prvků pole (pokud jsou jedním z podporovaných typů).
Příklad:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
]) Výsledek:
{ "_id" : 1, "tagsSize" : 4 }
V tomto příkladu získáme velikost prvního prvku pole (pole jsou založeny na nule, takže 0 odkazuje na první prvek).
Velikost dokumentu
MongoDB má také $bsonSize operátor, který vám umožní získat velikost dokumentu.
Dalším způsobem, jak získat velikost dokumentu, je použít Object.bsonSize() metoda.