MongoDB: Найти документ по несуществованию поля?


173

Есть ли способ указать условие «где документ не содержит поля»?

Например, я хочу найти только первое из этих 2, потому что оно не имеет поля «цена».

{"fruit":"apple", "color":"red"}


{"fruit":"banana", "color":"yellow", "price":"2.00"}


3
Вы также можете попробоватьdb.mycollection.find({ "price" : null })
evilReiko

Ответы:


329

Попробуйте $existsоператор:

db.mycollection.find({ "price" : { "$exists" : false } })

и посмотрите его документацию .


12
+1. Однако имейте в виду, что такие запросы не могут использовать индексацию и могут быть очень медленными в больших коллекциях.
Мнемосин

10
Отличный момент - спасибо. Я знаю, что это предостережение справедливо в MongoDB версии 1.8.x и ранее; но я думал, что запросы с ограничениями поля $ Существуют теперь могут использовать индексы в версии 2.0 ...?
влажный
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.