Bagaimana cara mencari dokumen dalam koleksi yang kehilangan bidang tertentu di MongoDB?
107
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.
$exist
kueri tidak dapat menggunakan indeks (lihat mongodb.org/display/DOCS/… ).scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
Jika Anda tidak peduli jika bidangnya hilang atau
null
(atau jika tidak pernahnull
) maka Anda dapat menggunakan yang sedikit lebih pendek dan lebih aman:Ini lebih aman karena
$exists
akan kembalitrue
meskipun bidangnya kosong, yang seringkali bukan hasil yang diinginkan dan dapat menyebabkan NPE.sumber
null
dan tidak hilang. Ini sebenarnya adalah perilaku yang tidak terduga, karena Anda tidak akan dapat melakukan hal yang sama untuk0
(yang jugafalse
), begitunull
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 karenaa
ininull
atau karenaa
hilang, maka$exists
tidak cukup baik, karena tidak akan menangkap kasus di manaa
adalahnull
.