Di MongoDB, Anda dapat menggunakan $exists operator kueri elemen untuk mencocokkan dokumen yang berisi bidang tertentu.
Anda juga dapat menggunakannya untuk mencocokkan dokumen yang tidak berisi bidang tertentu.
Anda juga dapat menggunakannya bersama dengan operator lain seperti $nin untuk mencocokkan dokumen yang memiliki bidang tertentu, tetapi tidak berisi nilai tertentu.
Contoh
Misalkan kita memiliki koleksi yang disebut cats yang berisi dokumen-dokumen berikut:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
Dokumen-dokumen ini sedikit tidak konsisten sehubungan dengan bidang yang mereka miliki. Beberapa memiliki weight bidang, yang lain memiliki height bidang, beberapa memiliki born lapangan, dll
Kita dapat menggunakan $exists operator untuk mengembalikan dokumen dari koleksi yang memiliki bidang tertentu.
Contoh:
db.cats.find( { weight: { $exists: true } } ) Hasil:
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }
Kita dapat melihat bahwa hanya dokumen-dokumen yang mengandung weight bidang dikembalikan.
Bidang yang Mengandung null
$exists operator menyertakan bidang yang berisi null . Itu tidak membedakan antara null dan non-null nilai.
Contoh:
db.cats.find( { name: { $exists: true } } ) Hasil:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }
Kita dapat melihat bahwa dokumen 5 dikembalikan, meskipun name its bidangnya adalah null .
Ada Tanpa Nilai Tertentu
Anda dapat menggabungkan $exists dengan operator lain untuk mengembalikan dokumen yang berisi bidang tersebut, tetapi bidang tersebut tidak berisi nilai tertentu.
Contoh:
db.cats.find( { weight: { $exists: true, $nin: [20,30] } } ) Hasil:
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
Ini adalah hasil yang berbeda dengan yang akan kita lihat jika kita hanya menggunakan $nin tanpa $exists operator.
Inilah yang akan terlihat seperti:
db.cats.find( { weight: { $nin: [20,30] } } ) Hasil:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") } Dokumen yang Tidak Mengandung Bidang Tertentu
Anda dapat menggunakan $exists: false untuk mengembalikan dokumen yang tidak berisi bidang yang ditentukan.
Contoh:
db.cats.find( { name: { $exists: false } } ) Hasil:
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
Dalam hal ini, satu dokumen dalam koleksi tidak berisi name lapangan.
Periksa Beberapa Bidang
Anda dapat memeriksa keberadaan beberapa bidang dengan memisahkannya dengan koma.
Contoh:
db.cats.find( {
name: { $exists: true },
height: { $exists: true }
} ) Hasil:
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
Contoh ini mengembalikan semua dokumen yang berisi name bidang dan height lapangan.