Mongodb Mongo:查找不带';我没有特定的领域

Mongodb Mongo:查找不带';我没有特定的领域,mongodb,null,exists,Mongodb,Null,Exists,如何搜索MongoDB中缺少特定字段的集合中的文档?是的,可以使用: 如果为true,$exists与包含该字段的文档匹配,包括字段值为null的文档。如果为false,则查询仅返回不包含该字段的文档。如果您不关心该字段是否丢失或null(或者如果它从不null),则可以使用略短且更安全的: 它更安全,因为即使字段为空,$exists也会返回true,这通常不是期望的结果,可能会导致NPE。请注意,$exist查询不能使用索引(请参阅)。@Theo:从MongoDB 2.0开始,$exists可

如何搜索MongoDB中缺少特定字段的集合中的文档?

是的,可以使用:


如果为true,$exists与包含该字段的文档匹配,包括字段值为null的文档。如果为false,则查询仅返回不包含该字段的文档。

如果您不关心该字段是否丢失或
null
(或者如果它从不
null
),则可以使用略短且更安全的:


它更安全,因为即使字段为空,
$exists
也会返回
true
,这通常不是期望的结果,可能会导致NPE。

请注意,
$exist
查询不能使用索引(请参阅)。@Theo:从MongoDB 2.0开始,$exists可以使用索引(),我在这之后将在Mongoid的作用域中使用。看起来像这样>
scope:without_recommendation,:where=>{:recommendation=>{“$exists”=>false}
但是,阅读代码的人可能会将其解释为字段必须等于
null
,并且不丢失。这实际上是意外的行为,因为您无法对
0
(这也是
false
)执行相同的操作,所以
null
在这里是一种例外。因此,最佳实践是使用不含糊的
$exists:false
得到更具可读性的答案。记住,如果您需要在后面添加注释,那么稍微短一点的变体实际上并不短@雪人如果我的目标是找到所有缺少字段
a
值的对象,或者是因为
a
null
或者
a
缺失,那么
$exists
就不够好,因为它无法捕捉
a
为null的情况。
db.things.find( { a : { $exists : false } } ); // return if a is missing
db.things.find( { a : null } ); // return if a is missing or null