Bagaimana cara mencari dokumen dalam koleksi yang kehilangan bidang tertentu di MongoDB?
Bagaimana cara mencari dokumen dalam koleksi yang kehilangan bidang tertentu di MongoDB?
Jawaban:
Ya, itu mungkin menggunakan $ ada :
db.things.find( { a : { $exists : false } } ); // return if a is missing
Jika benar, $ existing cocok dengan dokumen yang berisi bidang, termasuk dokumen yang nilai bidangnya null. Jika salah, kueri hanya mengembalikan dokumen yang tidak berisi bidang.
scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
Jika Anda tidak peduli jika bidangnya hilang atau null
(atau jika tidak pernah null
) maka Anda dapat menggunakan yang sedikit lebih pendek dan lebih aman:
db.things.find( { a : null } ); // return if a is missing or null
Ini lebih aman karena $exists
akan kembali true
meskipun bidangnya kosong, yang seringkali bukan hasil yang diinginkan dan dapat menyebabkan NPE.
null
dan tidak hilang. Ini sebenarnya adalah perilaku yang tidak terduga, karena Anda tidak akan dapat melakukan hal yang sama untuk 0
(yang juga false
), begitu null
juga jenis pengecualian di sini. Oleh karena itu, praktik terbaik adalah menggunakan jawaban $exists: false
yang lebih mudah dibaca yang tidak ambigu. Ingat, varian Anda yang sedikit lebih pendek sebenarnya tidak lebih pendek jika Anda perlu memiliki komentar di baliknya!
a
, baik karena a
ini null
atau karena a
hilang, maka $exists
tidak cukup baik, karena tidak akan menangkap kasus di mana a
adalah null
.
$exist
kueri tidak dapat menggunakan indeks (lihat mongodb.org/display/DOCS/… ).