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.