回答:
db.things.find( { a : { $exists : false } } ); // return if a is missing
trueの場合、$ existsは、フィールド値がnullであるドキュメントを含む、フィールドを含むドキュメントと一致します。がfalseの場合、クエリはフィールドを含まないドキュメントのみを返します。
scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
フィールドが欠落していないnull
かどうか(またはまったくない場合)が気にならない場合はnull
、少し短くて安全です。
db.things.find( { a : null } ); // return if a is missing or null
フィールドがnullであっても$exists
返されるため、安全ですtrue
。これは、多くの場合、望ましい結果ではなく、NPEにつながる可能性があります。
null
欠落していない必要があるため、コードを読んでいる誰かがそれを解釈する場合があります。これは実際には予期しない動作です。同じことを行うことはできないため0
(これもfalse
)、ここでnull
は一種の例外です。したがって、ベストプラクティスは、$exists: false
あいまいではない、より読みやすい回答を使用することです。コメントを付ける必要がある場合、少し短いバリアントは実際には短くありません。
a
のいずれかのために、a
であるnull
かのでa
不足している、そして$exists
それは例キャッチしないように、良い十分ではありませんa
ですnull
。
$exist
クエリはインデックスを使用できません(mongodb.org/display/DOCS/…を参照)。