Respuestas:
Sí, es posible usar $ existe :
db.things.find( { a : { $exists : false } } ); // return if a is missing
Cuando es verdadero, $ existe coincide con los documentos que contienen el campo, incluidos los documentos donde el valor del campo es nulo. Si es falso, la consulta devuelve solo los documentos que no contienen el campo.
scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
Si no le importa si falta el campo o null(o si nunca lo es null), puede usar el un poco más corto y seguro:
db.things.find( { a : null } ); // return if a is missing or null
Es más seguro porque $existsregresará trueincluso si el campo es nulo, lo que a menudo no es el resultado deseado y puede conducir a una NPE.
nully no faltar. Este es un comportamiento realmente inesperado, porque no podría hacer lo mismo para 0(que también lo es false), por lo que nulles una especie de excepción aquí. Por lo tanto, la mejor práctica es la respuesta más legible $exists: falseque no sea ambigua. Recuerde, su variante un poco más corta no es realmente más corta si necesita tener ese comentario detrás.
a, ya asea nullporque afalta o porque falta, entonces $existsno es lo suficientemente bueno, ya que no detectará los casos donde aestá null.
$existconsultas no pueden utilizar índices (consulte mongodb.org/display/DOCS/… ).