Как искать документы в коллекции, которые отсутствуют в определенном поле в MongoDB?
Да, возможно использование $exists:
db.things.find( { a : { $exists : false } } ); // return if a is missing
Когда значение true, $существует, совпадает с документами, которые содержат это поле, включая документы, где значение поля равно null. Если 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
что a
равно null
либо из- a
отсутствия a
, тогда $exists
не достаточно хороши, так как не поймут случаи, когда a
равно null
,
$exist
не могут использовать индексы (см. Mongodb.org/display/DOCS/… ).