Yanıtlar:
Evet, $ var kullanarak mümkündür :
db.things.find( { a : { $exists : false } } ); // return if a is missing
Doğru olduğunda, $ var, alan değerinin boş olduğu belgeler dahil, alanı içeren belgelerle eşleşir. Yanlışsa, sorgu yalnızca alanı içermeyen belgeleri döndürür.
scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
Alanın eksik olması veya null
(veya hiç olmaması) umurunuzda değilse null
, biraz daha kısa ve daha güvenli olanı kullanabilirsiniz :
db.things.find( { a : null } ); // return if a is missing or null
Daha güvenlidir, çünkü alan boş olsa bile $exists
geri döner true
, bu genellikle istenen sonuç değildir ve bir NPE'ye yol açabilir.
null
ve eksik olmaması gerektiği şeklinde yorumlayabilir . Bu aslında beklenmeyen bir davranıştır, çünkü aynı şeyi 0
(ki bu da false
) için yapamazsınız, null
buradaki istisna da öyle . Bu nedenle, en iyi uygulama, $exists: false
belirsiz olmayan daha okunabilir bir cevaptır . Unutmayın, biraz daha kısa varyantınız, arkasında bu yorumu yapmanız gerekiyorsa, aslında daha kısa değildir!
a
ya çünkü, a
olduğu null
ya çünkü a
eksik, o $exists
da vakaları yakalamak olmayacak gibi yeterince iyi değil a
ise null
.
$exist
sorgular dizin kullanamaz (bkz. Mongodb.org/display/DOCS/… ).