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_atне встановлені):

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

Дякую. Під час перевірки, чи існує поле, але встановлено на нуль, це дуже корисно.
jstice4all

Запропоновано, тому що при використанні findз простою nullінтерпретацією таких значень як 0.0, nullі це рішення уникає цього
Маттіас Геррманн

12

Використання:

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

Який підраховує всі електронні листи, властивість sent_at недійсних або не встановлено. Наведений вище запит такий же, як і нижче.

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.