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