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

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

{
  'sent_at': Date( 1336776254000 )
}

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

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

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

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

Ответ 1

Если поле sent_at не существует, если оно не установлено, то:

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

Если его там и null или вообще нет:

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

См. здесь для запроса и null

Ответ 2

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

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

Ответ 3

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

{ "sent_at": null }

Ответ 4

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

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

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

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