Di MongoDB, $size
operator pipa agregasi menghitung dan mengembalikan jumlah total item dalam larik.
$size
operator menerima satu argumen. Argumen dapat berupa ekspresi valid apa pun yang diselesaikan ke array.
Contoh
Misalkan kita memiliki koleksi yang disebut test
dengan dokumen sebagai berikut:
{ "_id" : 1, "data" : [ ] } { "_id" : 2, "data" : [ "a" ] } { "_id" : 3, "data" : [ "a", "b" ] } { "_id" : 4, "data" : [ "a", "b", "c" ] } { "_id" : 5, "data" : [ 1, 1, 1, 1 ] }
Kita bisa menggunakan $size
untuk mengembalikan jumlah item dalam larik di masing-masing data
bidang.
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3, 4, 5 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $size: [ "$data" ] }
}
}
]
)
Hasil:
{ "data" : [ ], "result" : 0 } { "data" : [ "a" ], "result" : 1 } { "data" : [ "a", "b" ], "result" : 2 } { "data" : [ "a", "b", "c" ], "result" : 3 } { "data" : [ 1, 1, 1, 1 ], "result" : 4 }
Array Bersarang
$size
operator tidak turun ke array bersarang dan menghitung elemennya. Ini mengevaluasi array dari tingkat atas.
Misalkan kita memiliki dokumen berikut dalam koleksi kita:
{ "data" : [ [ 1, 2 ], 3 ], "result" : 2 }
Dan kami menerapkan $size
untuk itu:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 6 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $size: [ "$data" ] }
}
}
]
)
Hasil:
{ "data" : [ [ 1, 2 ], 3 ], "result" : 2 }
Array bersarang dihitung sebagai satu elemen (terlepas dari berapa banyak elemen yang dikandungnya).
Tipe Data Salah
Argumen dapat berupa ekspresi apa pun yang valid, selama argumen tersebut diselesaikan ke array. Jika tidak menyelesaikan ke array, kesalahan dihasilkan.
Misalkan kita memiliki dokumen berikut:
{ "_id" : 7, "data" : 3 }
data
bidang tidak menyelesaikan ke array.
Inilah yang terjadi ketika kita menerapkan $size
ke bidang itu:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 7 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $size: [ "$data" ] }
}
}
]
)
Hasil:
Error: command failed: { "ok" : 0, "errmsg" : "The argument to $size must be an array, but was of type: double", "code" : 17124, "codeName" : "Location17124" } : aggregate failed : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/assert.js:18:14 [email protected]/mongo/shell/assert.js:639:17 [email protected]/mongo/shell/assert.js:729:16 [email protected]/mongo/shell/db.js:266:5 [email protected]/mongo/shell/collection.js:1058:12 @(shell):1:1
Pesan kesalahan memberi tahu kita bahwa The argument to $size must be an array, but was of type: double
.
Bidang Tidak Ada
Jika bidang tidak ada dalam dokumen, kesalahan akan ditampilkan.
Misalkan kita memiliki dokumen berikut:
{ "_id" : 8 }
Dan kami menerapkan $size
ke dokumen itu:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 8 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $size: [ "$data" ] }
}
}
]
)
Hasil:
Error: command failed: { "ok" : 0, "errmsg" : "The argument to $size must be an array, but was of type: missing", "code" : 17124, "codeName" : "Location17124" } : aggregate failed : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/assert.js:18:14 [email protected]/mongo/shell/assert.js:639:17 [email protected]/mongo/shell/assert.js:729:16 [email protected]/mongo/shell/db.js:266:5 [email protected]/mongo/shell/collection.js:1058:12 @(shell):1:1