MongoDB: Как запросить записи, где поле пустое или не задано?

у меня естьEmail документ, который имеетsent_at поле даты:

{
  'sent_at': Date( 1336776254000 )
}

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

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

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

Но как мне получить количество отправленных сообщений?

Ответы на вопрос(4)

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

db.emails.count({sent_at: { $type: 10 }})
 jstice4all28 апр. 2017 г., 18:29
Спасибо. При проверке, если поле существует, но установлено в ноль, это очень полезно.
 Matthias Herrmann27 апр. 2018 г., 11:14
Upvoted, потому что при использованииfind с простойnull интерпретирует значения как0.0 какnull и это решение позволяет избежать этого

Кажется, вы можете просто сделать одну строку:

{ "sent_at": null }

USE:

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

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

db.emails.count($or: [
  {sent_at: {$exists: false}},
  {sent_at: null}
])
Решение Вопроса

db.emails.count({sent_at: {$exists: false}})

Если он там и нулевой, или его нет вообще:

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

Ссылка здесь для запросов и ноль

Ваш ответ на вопрос