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.