Di MongoDB, $ifNull_ adalah operator pipa agregasi yang memungkinkan Anda menentukan nilai untuk digunakan sebagai pengganti null
Cara kerjanya adalah, Anda memberikan ekspresi dan ekspresi pengganti. Jika ekspresi mengevaluasi ke nilai bukan nol, ekspresi itu dikembalikan. Tetapi jika ekspresi bernilai null, $ifNull mengembalikan nilai ekspresi pengganti
Nilai nol mencakup contoh nilai yang tidak ditentukan atau bidang yang hilang
Contoh
Misalkan kita memiliki koleksi bernama test dengan dokumen-dokumen 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 operator $ifNull pada bidang db.test.aggregate( [ { $project: { result: { $ifNull: [ "$data", "Value not provided" ] } } } ] )1
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 bidang yang mengembalikan db.test.aggregate( [ { $project: { result: { $ifNull: [ "$data", "Value not provided" ] } } } ] )2
Bidang yang Tidak Terdefinisi dan Hilang
Seperti disebutkan, nilai yang tidak ditentukan dan bidang yang hilang diperlakukan sebagai nilai nol
Misalkan kita menambahkan dokumen berikut ke dalam koleksi kita
{ "_id" : 9, "data" : undefined } { "_id" : 10, "name" : "Homer" }Dalam hal ini, dokumen 9 memiliki db.test.aggregate( [ { $project: { result: { $ifNull: [ "$data", "Value not provided" ] } } } ] )_3 di bidang data, tetapi dokumen 10 bahkan tidak memiliki bidang db.test.aggregate( [ { $project: { result: { $ifNull: [ "$data", "Value not provided" ] } } } ] )1
Contoh berikut menunjukkan cara menggunakan sintaks ini dalam praktik
Contoh 1. Kueri untuk "not null" di Bidang Tertentu
Misalkan kita memiliki kumpulan tim dengan dokumen-dokumen berikut.
db.teams.insertOne({team: "Mavs", position: null, points: 31}) db.teams.insertOne({team: "Spurs", position: "Guard", points: 22}) db.teams.insertOne({team: "Rockets", position: null, points: 19}) db.teams.insertOne({team: "Warriors", position: "Forward", points: 26}) db.teams.insertOne({team: "Cavs", position: "Guard", points: 33})_Kita dapat menggunakan kode berikut untuk menemukan semua dokumen di mana bidang "posisi" bukan nol
db.teams.find({"position":{$ne:null}})Kueri ini mengembalikan dokumen berikut
{ _id: ObjectId("618bf18f35d8a762d3c28717"), team: 'Spurs', position: 'Guard', points: 22 } { _id: ObjectId("618bf18f35d8a762d3c28719"), team: 'Warriors', position: 'Forward', points: 26 } { _id: ObjectId("618bf18f35d8a762d3c2871a"), team: 'Cavs', position: 'Guard', points: 33 }Perhatikan bahwa satu-satunya dokumen yang dikembalikan adalah dokumen yang bidang "posisi" bukan nol
Contoh 2. Kueri untuk “not null” (Saat Tidak Setiap Dokumen Berisi Bidang)
Misalkan kita memiliki kumpulan tim dengan dokumen-dokumen berikut.
db.teams.insertOne({team: "Mavs", position: null, points: 31}) db.teams.insertOne({team: "Spurs", points: 22}) db.teams.insertOne({team: "Rockets", position: null, points: 19}) db.teams.insertOne({team: "Warriors", position: "Forward", points: 26}) db.teams.insertOne({team: "Cavs", position: "Guard", points: 33})Perhatikan bahwa dokumen kedua dalam kumpulan bahkan tidak memiliki bidang "posisi".
Kita dapat menggunakan kode berikut untuk menemukan semua dokumen di mana bidang "posisi" bukan nol
db.teams.find({"position":{$ne:null}})Kueri ini mengembalikan dokumen berikut
{ _id: ObjectId("618bf18f35d8a762d3c28719"), team: 'Warriors', position: 'Forward', points: 26 } { _id: ObjectId("618bf18f35d8a762d3c2871a"), team: 'Cavs', position: 'Guard', points: 33 }Karena dokumen kedua bahkan tidak memiliki bidang "posisi", maka tidak dikembalikan
Perhatikan juga bahwa dua dokumen lain yang memiliki nilai nol di bidang “posisi juga tidak dikembalikan
Ringkasan. Dengan menggunakan $ne. sintaks nol, kami hanya mengembalikan dokumen di mana bidang tertentu ada dan bukan nol