MongoDB: как запросить записи, в которых поле равно нулю или не задано?


106

У меня есть Emailдокумент с sent_atполем даты:

{
  'sent_at': Date( 1336776254000 )
}

Если это Emailне было отправлено, sent_atполе либо пустое, либо не существует.

Мне нужно получить количество отправленных / неотправленных Emails. Я застрял в попытке выяснить, как правильно запросить эту информацию. Я думаю, что это правильный способ получить количество отправленных:

db.emails.count({sent_at: {$ne: null}})

Но как мне подсчитать те, которые не отправлены?

Ответы:



16

Если вы хотите подсчитывать ТОЛЬКО документы с sent_atопределенным значением null(не считайте документы со значением sent_atnot set):

db.emails.count({sent_at: { $type: 10 }})

Спасибо. Это очень полезно при проверке наличия поля, но с нулевым значением.
jstice4all

Проголосовали за, потому что при использовании findс plain nullон интерпретирует такие значения, как 0.0as, nullи это решение позволяет этого избежать
Маттиас Херрманн,

12

Использование:

db.emails.count({sent_at: null})

Подсчитываются все электронные письма, у которых свойство sent_at имеет значение null или не установлено. Вышеупомянутый запрос такой же, как и ниже.

db.emails.count($or: [
  {sent_at: {$exists: false}},
  {sent_at: null}
])



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.