web-dev-qa-db-ja.com

MongoDB:フィールドがnullまたは未設定のレコードをクエリする方法

sent_at日付フィールドを持つEmailドキュメントがあります:

{
  'sent_at': Date( 1336776254000 )
}

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

すべての送信済み/未送信のEmailsのカウントを取得する必要があります。私は、この情報を照会する正しい方法を見つけようとしています。私はこれが送信されたカウントを取得する正しい方法だと思います:

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

しかし、送信されていないものの数を取得するにはどうすればよいですか?

96
Andrew

設定されていないときにsent_atフィールドが存在しない場合:

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

その存在とヌル、または存在しない場合:

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

クエリとnullについてはこちらを参照

159
jdi

nullの値で定義されたsent_atを持つドキュメントのみをカウントする場合(sent_atが設定されていないドキュメントはカウントしないでください):

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

つかいます:

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

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

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

あなたはただ単一の行を行うことができるようです:

{ "sent_at": null }
7
Jim Horng

これを試すこともできます:

db.emails.find($and:[{sent_at:{$exists:true},'sent_at':null}]).count()
0
Vivek Maraina