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 $existsakan kembali truemeskipun bidangnya kosong, yang seringkali bukan hasil yang diinginkan dan dapat menyebabkan NPE.
nulldan tidak hilang. Ini sebenarnya adalah perilaku yang tidak terduga, karena Anda tidak akan dapat melakukan hal yang sama untuk 0(yang juga false), begitu nulljuga jenis pengecualian di sini. Oleh karena itu, praktik terbaik adalah menggunakan jawaban $exists: falseyang 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 aini nullatau karena ahilang, maka $existstidak cukup baik, karena tidak akan menangkap kasus di mana aadalah null.
$existkueri tidak dapat menggunakan indeks (lihat mongodb.org/display/DOCS/… ).