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

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

{
  'sent_at': Date( 1336776254000 )
}

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

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

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

но как я должен получить количество тех, которые не отправлены?

4 ответов


Если поле sent_at отсутствует, когда оно не установлено, то:

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

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

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

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


если вы хотите только подсчитать документы с sent_at определяется со значением null (Не считайте документы с sent_at не установлен):

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

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

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

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

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

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

{ "sent_at": null }