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é $existstornerà trueanche se il campo è nullo, il che spesso non è il risultato desiderato e può portare a un NPE.
nulle 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: falseche 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è nullo perché amanca, allora $existsnon è abbastanza buono, poiché non cattura i casi in cui si atrova null.
$existquery non possono utilizzare gli indici (vedere mongodb.org/display/DOCS/… ).