requête MongoDB: champ ne soit existe pas ou a une valeur spécifique
Question
Je voudrais interroger une collection mongo pour les dossiers qui soit ne disposent pas de valeur pour un champ nommé « action », ou qui ont explicitement la valeur « http » pour « système ». Ça a l'air assez facile, mais ce problème est avéré plus complexe qu'il n'y paraît.
Depuis db.collection.find({'scheme': None})
retourne tous les enregistrements où « scheme » est non défini (pas de champ d'index), je suppose d'abord ce qui suit fonctionnerait:
db.collection.find({'scheme': {'$in': ['http', None]}})
Cependant, cela semble exclure les valeurs dans lesquelles « système » ne sont pas définies, donc je ne peux que supposer qu'il est à la recherche d'enregistrements où régime est soit « http », soit explicitement défini à None
. Cela semble être un peu contre-intuitif, mais nous l'avons. Ma deuxième tentative a été la suivante:
db.collection.find( {'$or': [{'scheme': {'$exists': False}}, {'scheme': 'http'}]})
Cela exclut également résultat lorsque système est défini. Cette fois-ci, je ne peux même penser à une raison logique pour laquelle cela est un échec.
Toutes les idées pourquoi c'est un échec, et comment je peux l'obtenir pour travailler comme vous le souhaitez?
Merci
EDIT: Juste pensé que je constate que je joue cette requête par Python (pymongo), ce qui explique la None
(sur la null
de Javascript)
La solution
Résolue. Ceci est apparemment une question de ma version de MongoDB (1.4.4), le problème est résolu dans 1.6.5