Di MongoDB, $ifNull
adalah operator pipeline agregasi yang memungkinkan Anda menentukan nilai yang akan digunakan sebagai pengganti null
.
Cara kerjanya adalah, Anda memberikan ekspresi dan ekspresi pengganti. Jika ekspresi dievaluasi ke nilai non-null, ekspresi itu dikembalikan. Tetapi jika ekspresi mengevaluasi ke nilai nol, $ifNull
mengembalikan nilai ekspresi pengganti.
Nilai nol mencakup contoh nilai yang tidak ditentukan atau bidang yang tidak ada.
Contoh
Misalkan kita memiliki koleksi yang disebut test
dengan dokumen sebagai berikut:
{ "_id" : 1, "data" : 250 } { "_id" : 2, "data" : -250 } { "_id" : 3, "data" : "Bucket" } { "_id" : 4, "data" : 0 } { "_id" : 5, "data" : ISODate("2021-01-03T23:30:15.100Z") } { "_id" : 6, "data" : null } { "_id" : 7, "data" : Infinity } { "_id" : 8, "data" : -Infinity }
Inilah yang terjadi jika kita menggunakan $ifNull
operator pada data
bidang:
db.test.aggregate(
[
{
$project:
{
result: { $ifNull: [ "$data", "Value not provided" ] }
}
}
]
)
Hasil:
{ "_id" : 1, "result" : 250 } { "_id" : 2, "result" : -250 } { "_id" : 3, "result" : "Bucket" } { "_id" : 4, "result" : 0 } { "_id" : 5, "result" : ISODate("2021-01-03T23:30:15.100Z") } { "_id" : 6, "result" : "Value not provided" } { "_id" : 7, "result" : Infinity } { "_id" : 8, "result" : -Infinity }
Kita dapat melihat bahwa hanya satu bidang yang memiliki nilai nol dan oleh karena itu, itu adalah satu-satunya yang mengembalikan "Value not provided"
.
Bidang Tidak Terdefinisi dan Tidak Ada
Seperti yang disebutkan, nilai yang tidak ditentukan dan bidang yang hilang diperlakukan sebagai nilai nol.
Misalkan kita menambahkan dokumen berikut ke koleksi kita:
{ "_id" : 9, "data" : undefined } { "_id" : 10, "name" : "Homer" }
Dalam hal ini, dokumen 9 memiliki undefined
di bidang data, tetapi dokumen 10 bahkan tidak memiliki data
lapangan.
Inilah yang terjadi ketika kita menerapkan $ifNull
ke dokumen-dokumen itu:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 9, 10 ] } } },
{
$project:
{
result: { $ifNull: [ "$data", "Value not provided" ] }
}
}
]
)
Hasil:
{ "_id" : 9, "result" : "Value not provided" } { "_id" : 10, "result" : "Value not provided" }