MongoDB 4.4から、$binarySize
を使用できます 指定された文字列またはバイナリデータ値のコンテンツのサイズをバイト単位で返す集約パイプライン演算子。
文字列またはバイナリデータ値のいずれかに解決される限り、任意の有効な式を受け入れます。引数はnull
にすることもできます 、この場合、$binarySize
null
を返します 。
例
posts
というコレクションがあるとします。 次のドキュメントで:
{ "_id" : 1, "title" : "Hello World!", "body" : "This is a test post for the purposes of testing", "tags" : [ "html", "css", "sql", "xml" ], "status" : null }
$binarySize
を使用できます さまざまなフィールドのサイズを確認する演算子。
例:
db.posts.aggregate([
{
$project: {
"titleSize": { $binarySize: "$title" },
"bodySize": { $binarySize: "$body" }
}
}
])
結果:
{ "_id" : 1, "titleSize" : 12, "bodySize" : 47 }
この場合、title
のバイナリサイズを返します。 フィールドとbody
フィールド。
ヌル値
指定されたフィールドの値がnull
の場合 、$binarySize
演算子はnull
を返します 。
例:
db.posts.aggregate([
{
$project: {
"statusSize": { $binarySize: "$status" }
}
}
])
結果:
{ "_id" : 1, "statusSize" : null }
この場合、status
ドキュメントのフィールドはnull
です 、など$binarySize
返されたnull
。
間違ったデータ型
前述のように、$binarySize
文字列、バイナリデータ値、またはnull
のいずれかに解決される限り、任意の有効な式を受け入れます 。
別のBSONタイプに解決される式を提供するとどうなるかの例を次に示します。
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: "$tags" }
}
}
])
結果:
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
この場合、配列のサイズを見つけようとしましたが、サポートされているBSONタイプの1つではないため、エラーが発生します。
ただし、個々の配列要素のサイズを取得することはできます(サポートされているタイプの1つである限り)。
例:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
結果:
{ "_id" : 1, "tagsSize" : 4 }
この例では、最初の配列要素のサイズを取得します(配列はゼロベースであるため、0
最初の要素を指します。
ドキュメントサイズ
MongoDBには$bsonSize
もあります 演算子。ドキュメントのサイズを取得できます。
ドキュメントのサイズを取得する別の方法は、Object.bsonSize()
を使用することです。 メソッド。