Answers:
是的,可以使用$ exists:
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
is null
或因为a
missing),那么这$exists
还不够好,因为它无法捕获a
is 的情况null
。
$exist
查询不能使用索引(请参阅mongodb.org/display/DOCS/…)。