Как искать документы в коллекции, в которых отсутствует определенное поле в MongoDB?
Mongo: найти элементы, у которых нет определенного поля
Ответы (2)
Да, это возможно с помощью $exists:
db.things.find( { a : { $exists : false } } ); // return if a is missing
Когда значение равно true, $exists соответствует документам, содержащим это поле, включая документы, в которых значение поля равно null. Если ложно, запрос возвращает только те документы, которые не содержат поля.
person
Andrew Orsich
schedule
19.04.2011
Имейте в виду, что
$exist
запросы не могут использовать индексы (см. mongodb.org/display /ДОКС/).
- person Theo; 19.04.2011
@Theo: начиная с MongoDB 2.0 $exists может использовать индексы (jira.mongodb.org/browse /СЕРВЕР-393)
- person Dmitry Schetnikovich; 23.11.2011
Я хотел, чтобы Mongoid использовал его в прицеле. Выглядит так ›
scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
- person genkilabs; 15.06.2012
Если вам все равно, отсутствует ли поле или null
(или если оно никогда не null
), вы можете использовать немного более короткий и более безопасный вариант:
db.things.find( { a : null } ); // return if a is missing or null
Это безопаснее, потому что $exists
вернет true
, даже если поле пустое, что часто не является желаемым результатом и может привести к NPE.
person
nilskp
schedule
30.11.2012
Однако кто-то, читающий код, может интерпретировать его как поле, которое должно быть равно
null
и не отсутствовать. Это на самом деле неожиданное поведение, потому что вы не сможете сделать то же самое для 0
(что также false
), поэтому null
здесь является своего рода исключением. Поэтому наилучшей практикой является более читаемый ответ с использованием $exists: false
, который не является двусмысленным. Помните, что ваш немного более короткий вариант на самом деле не короче, если вам нужен этот комментарий!
- person Yeti; 03.09.2018
@Yeti, если моя цель состоит в том, чтобы найти все объекты, в которых отсутствует значение для поля
a
, либо потому, что a
равно null
, либо потому, что a
отсутствует, то $exists
недостаточно, так как он не будет улавливать случаи, когда a
равно null
.
- person nilskp; 07.09.2018