Di MongoDB Anda dapat menggunakan $isArray
operator pipeline agregasi untuk memeriksa apakah suatu nilai adalah array atau bukan.
Ia menerima ekspresi apa pun yang valid, dan mengembalikan true
jika ekspresinya adalah array, false
jika tidak.
Contoh
Misalkan kita memiliki koleksi yang disebut test
dengan dokumen sebagai berikut:
{ "_id" : 1, "data" : [ ] } { "_id" : 2, "data" : [ 1, 2, 3 ] } { "_id" : 3, "data" : [ "XS", "M", "L" ] } { "_id" : 4, "data" : 123 } { "_id" : 5, "data" : "Homer Jay" }
Kita dapat menggunakan kode berikut untuk memeriksa data
bidang untuk array:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3, 4, 5 ] } } },
{
$project:
{
_id: 1,
data: 1,
result: { $isArray: "$data" }
}
}
]
)
Hasil:
{ "_id" : 1, "data" : [ ], "result" : true } { "_id" : 2, "data" : [ 1, 2, 3 ], "result" : true } { "_id" : 3, "data" : [ "XS", "M", "L" ], "result" : true } { "_id" : 4, "data" : 123, "result" : false } { "_id" : 5, "data" : "Homer Jay", "result" : false }
Kita dapat melihat bahwa tiga dokumen pertama berisi array dan dua lainnya tidak.
Juga, kita dapat melihat bahwa dokumen pertama berisi array kosong. Itu masih array, jadi $isArray
mengembalikan true
.
Contoh 2
Berikut contoh lain yang berisi berbagai bidang dengan jenis BSON yang berbeda.
Misalkan kita memiliki koleksi yang disebut types
dengan dokumen berikut:
{ "_id" : ObjectId("601738d7c8eb4369cf6ad9de"), "double" : 123.75, "string" : "123", "boolean" : true, "date" : ISODate("2020-12-31T23:30:15.123Z"), "integer" : 123, "long" : NumberLong(123), "decimal" : NumberDecimal("123.75"), "object" : { "a" : 1 }, "array" : [ 1, 2, 3 ] }
Untuk tujuan artikel ini, saya memberi nama setiap bidang untuk mencerminkan jenis BSON-nya.
Sekarang kita dapat menggunakan kode berikut untuk mengembalikan true
atau false
untuk setiap bidang, bergantung pada apakah bidang tersebut berupa larik atau tidak:
db.types.aggregate(
[
{
$project:
{
_id: { $isArray: "$_id" },
double: { $isArray: "$double" },
string: { $isArray: "$string" },
boolean: { $isArray: "$boolean" },
date: { $isArray: "$date" },
integer: { $isArray: "$integer" },
long: { $isArray: "$long" },
decimal: { $isArray: "$decimal" },
object: { $isArray: "$object" },
array: { $isArray: "$array" }
}
}
]
).pretty()
Hasil:
{ "_id" : false, "double" : false, "string" : false, "boolean" : false, "date" : false, "integer" : false, "long" : false, "decimal" : false, "object" : false, "array" : true }
Bidang Tidak Ada
Menerapkan $isArray
ke bidang yang tidak ada menghasilkan false
.
Misalkan test
our kami koleksi berisi dokumen berikut:
{ "_id" : 6 }
Dan kami menerapkan $isArray
ke dokumen itu:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 6 ] } } },
{
$project:
{
_id: 1,
data: 1,
result: { $isArray: "$data" }
}
}
]
)
Hasil:
{ "_id" : 6, "result" : false }
Nilai Null
Menerapkan $isArray
ke null
mengembalikan false
.
Misalkan test
our kami koleksi berisi dokumen berikut:
{ "_id" : 7, "data" : null }
Dan kami menerapkan $isArray
ke dokumen itu:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 7 ] } } },
{
$project:
{
_id: 1,
data: 1,
result: { $isArray: "$data" }
}
}
]
)
Hasil:
{ "_id" : 7, "data" : null, "result" : false }
Nilai Tidak Terdefinisi
Demikian juga, memberikan nilai yang tidak ditentukan akan mengembalikan false
.
Misalkan test
our kami koleksi berisi dokumen berikut:
{ "_id" : 8, "data" : undefined }
Terapkan $isArray
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 8 ] } } },
{
$project:
{
_id: 1,
data: 1,
result: { $isArray: "$data" }
}
}
]
)
Hasil:
{ "_id" : 8, "data" : undefined, "result" : false }