MongoDB: Trouver un document par inexistence d'un champ?


173

Existe-t-il un moyen de spécifier une condition "où le document ne contient pas de champ"?

Par exemple, je veux trouver uniquement le premier de ces 2 car il n'a pas le champ "prix".

{"fruit":"apple", "color":"red"}


{"fruit":"banana", "color":"yellow", "price":"2.00"}


3
Vous pouvez aussi essayerdb.mycollection.find({ "price" : null })
evilReiko

Réponses:


329

Essayez l' $existsopérateur:

db.mycollection.find({ "price" : { "$exists" : false } })

et consultez sa documentation .


12
+1. Cependant, gardez à l'esprit que ces requêtes ne peuvent pas utiliser l'indexation et peuvent être très lentes sur les grandes collections.
mnemosyn

10
Excellent point - merci. Je sais que cette mise en garde est vraie dans MongoDB version 1.8.x et avant; mais je pensais que les requêtes avec des contraintes de champ $ exist peuvent désormais utiliser les index de la version 2.0 ...?
humide
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.