MongoDB query: campo o non esiste o ha valore specifico
Domanda
Vorrei interrogare una collezione Mongo per i record che o non hanno un valore per un campo denominato 'regime', o hanno esplicitamente il valore 'http' per 'schema'. Suoni abbastanza facile, ma questo problema si è rivelato più complesso di quanto appare primi.
Dal db.collection.find({'scheme': None})
restituisce tutti i record in cui è undefined 'schema' (nessun campo indice), inizialmente ho assunto la seguente dovrebbe funzionare:
db.collection.find({'scheme': {'$in': ['http', None]}})
Tuttavia, questo sembra escludere valori in cui è undefined 'schema', quindi posso solo supporre che è alla ricerca di record in cui schema è o 'http', o esplicitamente definito come None
. Questo sembra essere un po 'controintuitivo, ma non l'abbiamo. Il mio secondo tentativo è stato il seguente:
db.collection.find( {'$or': [{'scheme': {'$exists': False}}, {'scheme': 'http'}]})
Questo esclude anche il risultato in cui schema è indefinito. Questa volta, non posso nemmeno pensare a una ragione logica perché questo sta venendo a mancare.
Tutte le idee perché questo sta venendo a mancare, e come posso farlo funzionare, se lo desideri?
Grazie
EDIT: Ho pensato di notare che io sto eseguendo questa query tramite Python (pymongo), il che spiega la None
(oltre null
di Javascript)
Soluzione
Risolto:. Questo è apparentemente una questione di mia versione di MongoDB (1.4.4), il problema è risolto in 1.6.5