MongoDB:フィールドがnullまたは設定されていないレコードをクエリする方法は?


106

日付フィールドがあるEmailドキュメントがありsent_atます。

{
  'sent_at': Date( 1336776254000 )
}

これEmailが送信されていない場合、sent_atフィールドはnullまたは存在しません。

送信/未送信のすべての数を取得する必要がありEmailsます。この情報を照会する正しい方法を見つけ出そうとするのに行き詰まっています。これは送信数を取得する正しい方法だと思います:

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

しかし、送信されないものの数をどのように取得する必要がありますか?

回答:



16

sent_at値が定義されているドキュメントのみをカウントする場合nullsent_at未設定のドキュメントはカウントしない):

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

ありがとうございました。フィールドが存在するがnullに設定されているかどうかを確認する場合、これは非常に便利です。
jstice4all 2017

findプレーンnullで使用すると0.0asのような値を解釈 しnull、このソリューションでこれを回避するため、賛成です
Matthias Herrmann

12

使用する:

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

sent_atプロパティがnullまたは設定されていないすべてのメールをカウントします。上記のクエリは以下と同じです。

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.