Risposte:
Sì, è possibile usare $ exist :
db.things.find( { a : { $exists : false } } ); // return if a is missing
Quando è vero, $ esiste corrisponde ai documenti che contengono il campo, inclusi i documenti in cui il valore del campo è nullo. Se è falso, la query restituisce solo i documenti che non contengono il campo.
scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
Se non ti interessa se il campo manca o null
(o se non lo è mai null
), puoi utilizzare il campo leggermente più corto e più sicuro:
db.things.find( { a : null } ); // return if a is missing or null
È più sicuro perché $exists
tornerà true
anche se il campo è nullo, il che spesso non è il risultato desiderato e può portare a un NPE.
null
e non mancante. Questo è in realtà un comportamento inaspettato, perché non saresti in grado di fare lo stesso per 0
(che è anche false
), quindi null
è una specie di eccezione qui. Pertanto, la migliore pratica è la risposta più leggibile $exists: false
che non è ambigua. Ricorda, la tua variante leggermente più corta non è in realtà più corta se hai bisogno di quel commento dietro di essa!
a
, perché a
è null
o perché a
manca, allora $exists
non è abbastanza buono, poiché non cattura i casi in cui si a
trova null
.
$exist
query non possono utilizzare gli indici (vedere mongodb.org/display/DOCS/… ).