1. ホーム
  2. mongodb

[解決済み] MongoDB: フィールドがNULLまたは未設定のレコードを検索するには?

2022-08-17 16:54:53

質問

私は Email ドキュメントがあり、そのドキュメントには sent_at の日付フィールドを持つドキュメントです。

{
  'sent_at': Date( 1336776254000 )
}

もし、この Email が送信されていない場合は sent_at フィールドは NULL か、存在しないかのどちらかです。

すべての送信/未送信の数を取得する必要がある Emails . この情報を取得するための正しいクエリ方法を見つけ出そうとして行き詰っています。私はこれが送信されたカウントを取得するための正しい方法だと思います。

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

しかし、送信されないもののカウントはどのように取得すればよいのでしょうか?

どのように解決するのですか?

もし 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 または欠落したフィールドのクエリ セクションで、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 である。すなわち、item フィールドの値は BSONタイプ Null (タイプ番号 10 ) :

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