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 :
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 この場合、配列のサイズを見つけようとしましたが、サポートされているBSONタイプの1つではないため、エラーが発生します。
ただし、個々の配列要素のサイズを取得することはできます(サポートされているタイプの1つである限り)。
例:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
]) 結果:
{ "_id" : 1, "tagsSize" : 4 }
この例では、最初の配列要素のサイズを取得します(配列はゼロベースであるため、0 最初の要素を指します。
ドキュメントサイズ
MongoDBには$bsonSizeもあります 演算子。ドキュメントのサイズを取得できます。
ドキュメントのサイズを取得する別の方法は、Object.bsonSize()を使用することです。 メソッド。