Réponses:
Ouais, c'est possible en utilisant $ existe :
db.things.find( { a : { $exists : false } } ); // return if a is missing
Quand est vrai, $ existe correspond aux documents qui contiennent le champ, y compris les documents où la valeur du champ est nulle. Si la valeur est false, la requête ne renvoie que les documents qui ne contiennent pas le champ.
scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
Si vous ne vous souciez pas de savoir si le champ est manquant ou null(ou si ce n'est jamais null), vous pouvez utiliser le plus court et le plus sûr:
db.things.find( { a : null } ); // return if a is missing or null
C'est plus sûr car $existsretournera truemême si le champ est nul, ce qui n'est souvent pas le résultat souhaité et peut conduire à un NPE.
nullet non manquant. C'est en fait un comportement inattendu, car vous ne pourriez pas faire la même chose pour 0(ce qui l'est aussi false), c'est donc une nullsorte d'exception ici. Par conséquent, la meilleure pratique est la réponse la plus lisible en utilisant $exists: falsece qui n'est pas ambigu. N'oubliez pas que votre variante légèrement plus courte n'est pas réellement plus courte si vous avez besoin d'avoir ce commentaire derrière elle!
a, soit parce que ais nullsoit parce que aest manquant, alors ce $existsn'est pas assez bien, car il n'attrapera pas les cas où aest null.
$existrequêtes ne peuvent pas utiliser d'index (voir mongodb.org/display/DOCS/… ).