Как искать документы в коллекции, в которых отсутствует определенное поле в MongoDB?
107
Да, можно использовать $ exists :
db.things.find( { a : { $exists : false } } ); // return if a is missing
Если истинно, $ exists соответствует документам, содержащим поле, включая документы, в которых значение поля равно null. Если false, запрос возвращает только те документы, которые не содержат поля.
$exist
запросы не могут использовать индексы (см. Mongodb.org/display/DOCS/… ).scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
Если вам все равно, если поле отсутствует или
null
(или никогдаnull
), вы можете использовать немного короче и безопаснее:Это безопаснее, потому
$exists
что вернет,true
даже если поле имеет значение NULL, что часто не является желаемым результатом и может привести к NPE.источник
null
а не отсутствовать. На самом деле это неожиданное поведение, потому что вы не сможете сделать то же самое для0
(что тоже естьfalse
), поэтомуnull
это своего рода исключение. Следовательно, наилучшая практика - это более читаемый ответ,$exists: false
который не является двусмысленным. Помните, что ваш немного более короткий вариант на самом деле не короче, если вам нужен этот комментарий!a
, либо потому, чтоa
оно , либо потому,null
чтоa
оно отсутствует, то$exists
этого недостаточно, так как он не улавливает случаи, когдаa
естьnull
.