Dari MongoDB 4.4, Anda dapat menggunakan $binarySize
operator pipeline agregasi untuk mengembalikan ukuran string tertentu atau konten nilai data biner dalam byte.
Ia menerima ekspresi valid apa pun selama ia memutuskan ke string atau nilai data biner. Argumennya juga bisa null
, dalam hal ini, $binarySize
mengembalikan null
.
Contoh
Misalkan kita memiliki koleksi yang disebut posts
dengan dokumen berikut:
{ "_id" : 1, "title" : "Hello World!", "body" : "This is a test post for the purposes of testing", "tags" : [ "html", "css", "sql", "xml" ], "status" : null }
Kita dapat menggunakan $binarySize
operator untuk memeriksa ukuran berbagai bidang.
Contoh:
db.posts.aggregate([
{
$project: {
"titleSize": { $binarySize: "$title" },
"bodySize": { $binarySize: "$body" }
}
}
])
Hasil:
{ "_id" : 1, "titleSize" : 12, "bodySize" : 47 }
Dalam hal ini, kami mengembalikan ukuran biner dari title
bidang dan body
lapangan.
Nilai Null
Jika nilai bidang yang ditentukan adalah null
, $binarySize
operator akan mengembalikan null
.
Contoh:
db.posts.aggregate([
{
$project: {
"statusSize": { $binarySize: "$status" }
}
}
])
Hasil:
{ "_id" : 1, "statusSize" : null }
Dalam hal ini, status
bidang dalam dokumen kami adalah null
, dan jadi $binarySize
mengembalikan null
.
Tipe Data Salah
Seperti yang disebutkan, $binarySize
menerima ekspresi valid apa pun selama itu diselesaikan menjadi string, nilai data biner, atau null
.
Berikut adalah contoh yang terjadi jika Anda memberikan ekspresi yang diselesaikan ke jenis BSON yang berbeda:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: "$tags" }
}
}
])
Hasil:
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
Dalam hal ini, kami mencoba mencari ukuran array, tetapi itu bukan salah satu jenis BSON yang didukung, jadi kami mendapatkan kesalahan.
Namun, kita masih bisa mendapatkan ukuran elemen larik individual (selama itu salah satu jenis yang didukung).
Contoh:
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
Hasil:
{ "_id" : 1, "tagsSize" : 4 }
Dalam contoh ini, kita mendapatkan ukuran elemen array pertama (array berbasis nol, jadi 0
mengacu pada elemen pertama).
Ukuran Dokumen
MongoDB juga memiliki $bsonSize
operator, yang memungkinkan Anda mendapatkan ukuran dokumen.
Cara lain untuk mendapatkan ukuran dokumen adalah dengan menggunakan Object.bsonSize()
metode.