Запрос MongoDB: поле либо не существует, либо имеет конкретное значение - PullRequest
21 голосов
/ 05 января 2011

Я хотел бы запросить коллекцию монго для записей, которые либо не имеют значения для поля с именем «схема», либо явно имеют значение «http» для «схема». Звучит довольно просто, но эта проблема оказалась более сложной, чем кажется на первый взгляд.

Поскольку db.collection.find({'scheme': None}) возвращает все записи, в которых «схема» не определена (поле индекса отсутствует), я изначально предполагал, что будет работать следующее:

db.collection.find({'scheme': {'$in': ['http', None]}})

Однако это, по-видимому, исключает значения, в которых «схема» не определена, поэтому я могу только предположить, что она ищет записи, в которых схема либо «http», либо явно определена как «1007 *». Это кажется немного нелогичным, но у нас это есть. Моя вторая попытка была следующей:

db.collection.find( {'$or': [{'scheme': {'$exists': False}}, {'scheme': 'http'}]})

Это также исключает результат, где схема не определена. На этот раз я даже не могу придумать логическую причину, по которой это не удается.

Есть идеи, почему это не помогает, и как я могу заставить его работать так, как нужно?

Спасибо

РЕДАКТИРОВАТЬ: Просто подумал, что заметил, что я выполняю этот запрос через Python (pymongo), который объясняет None (над null) Javascript

1 Ответ

8 голосов
/ 05 января 2011

Решено: Это, очевидно, проблема моей версии mongodb (1.4.4), проблема решена в 1.6.5.

...