MongoDB: Bagaimana cara membuat kueri untuk catatan di mana bidang kosong atau tidak disetel?


106

Saya memiliki Emaildokumen dengan sent_atbidang tanggal:

{
  'sent_at': Date( 1336776254000 )
}

Jika ini Emailbelum dikirim, sent_atbidangnya kosong, atau tidak ada.

Saya perlu menghitung semua yang terkirim / tidak terkirim Emails. Saya terjebak dalam mencoba mencari cara yang tepat untuk menanyakan informasi ini. Saya pikir ini adalah cara yang tepat untuk mendapatkan hitungan terkirim:

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

Tapi bagaimana saya bisa mendapatkan jumlah yang tidak terkirim?

Jawaban:



16

Jika Anda ingin HANYA menghitung dokumen dengan sent_atditentukan dengan nilai null(jangan hitung dokumen dengan sent_attidak ditetapkan):

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

Terima kasih. Saat memeriksa apakah bidang ada tetapi disetel ke nol, ini sangat berguna.
jstice4all

Upvoted karena ketika menggunakan finddengan polos nullitu menafsirkan nilai-nilai seperti 0.0sebagai nulldan solusi ini menghindari ini
Matthias Herrmann

12

Menggunakan:

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

Yang menghitung semua email yang properti sent_atnya null atau tidak disetel. Kueri di atas sama seperti di bawah ini.

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

8

Sepertinya Anda hanya bisa melakukan satu baris:

{ "sent_at": null }

0

Anda juga dapat mencoba ini:

db.emails.find($and:[{sent_at:{$exists:true},'sent_at':null}]).count()
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.