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

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

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

{
  'sent_at': Date( 1336776254000 )
}

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

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

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

しかし、送信されなかったものの数をどうやって取得すればよいのでしょうか?

ベストアンサー1

sent_atフィールドが設定されていないときにフィールドが存在しない場合は、次のようになります。

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

存在していて null の場合、またはまったく存在しない場合:

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

存在し、null の場合:

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

Null または欠落フィールドのクエリMongoDB マニュアルのセクションでは、null 値と欠損値をクエリする方法について説明しています。

平等フィルター

クエリ{ item : null }は、値がnull またはフィールドが含まれませんitem

db.inventory.find( { item: null } )

存在チェック

次の例では、フィールドを含まないドキュメントをクエリします。

クエリ{ item : { $exists: false } }は、次のフィールドを含まないドキュメントと一致しますitem

db.inventory.find( { item : { $exists: false } } )

型チェック

クエリ{ item : { $type: 10 } }が一致するのみitem値が であるフィールドを含む文書null。つまり、アイテムフィールドの値が である文書。BSONタイプ Null(タイプ番号10) :

db.inventory.find( { item : { $type: 10 } } )

おすすめ記事