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