MongoDB Abfrage: Feld existiert entweder nicht oder bestimmten Wert hat
Frage
Ich möchte eine Mongo Sammlung für Datensätze abfragen, die entweder keinen Wert für ein Feld ‚Schema‘ genannt haben, oder explizit den Wert ‚http‘ für ‚scheme‘. Klingt ziemlich einfach, aber dieses Problem hat sich als komplexer als es zunächst erscheint.
Da db.collection.find({'scheme': None})
alle Datensätze zurückgibt, wo ‚scheme‘ nicht definiert ist (kein Indexfeld), habe ich zunächst davon ausgegangen folgendes funktionieren würde:
db.collection.find({'scheme': {'$in': ['http', None]}})
Allerdings scheint diese Werte auszuschließen, in der ‚Schema‘ nicht definiert ist, so dass ich nur annehmen, kann es für Datensätze sucht, wo Schema ist entweder ‚http‘ oder explizit sein None
definiert. Dies scheint ein wenig eingängig zu sein, aber da haben wir es. Mein zweiter Versuch war die folgende:
db.collection.find( {'$or': [{'scheme': {'$exists': False}}, {'scheme': 'http'}]})
Dieses auch schließt führen, dass Schema nicht definiert ist. Dieses Mal kann ich nicht einmal denken Sie an einen logischen Grund, warum dies versagt.
Irgendwelche Ideen, warum dies versagt, und wie kann ich es an die Arbeit wie gewünscht?
Danke
EDIT: Ich dachte, ich möchte anmerken, dass ich diese Abfrage durch Python bin Ausführen (pymongo), die die None
erklärt (über Javascripts null
)
Lösung
gelöst. Dies ist offensichtlich ein Problem meiner Version von mongodb (1.4.4), wird das Problem in 1.6.5 gelöst