使用MongoDB检查字段是否存在


131

因此,我试图查找所有具有字段集并且不为空的记录。

我尝试使用$exists,但是根据MongoDB文档,此查询将返回等于null的字段。

$exists 与包含存储空值的字段的文档匹配。

所以我现在假设我必须做这样的事情:

db.collection.find({ "fieldToCheck" : { $exists : true, $not : null } })

但是,无论何时尝试,我都会收到错误消息[invalid use of $not] 有人知道如何查询此消息吗?

Answers:


184

使用$ne(“不相等”)

db.collection.find({ "fieldToCheck": { $exists: true, $ne: null } })

这会返回什么?空集合?一个项目?数组?
奥利弗·迪克森

4
@iLoveUnicorns:find总是返回:符合条件的记录集合。
塞尔吉奥·图伦采夫

2
@SergioTulentsev AFAIK它返回一个游标
fernandohur

@fernandohur:是的,但是如果您的文档少于一页,您甚至看不到区别。而且,如果您要从外部驱动程序运行此查询,我可以肯定它们中的大多数可以使您免受游标实现细节的影响。
塞尔吉奥·图伦采夫'16

23

假设我们有一个如下所示的集合:

{ 
  "_id":"1234"
  "open":"Yes"
  "things":{
             "paper":1234
             "bottle":"Available"
             "bottle_count":40
            } 
}

我们想知道瓶子领域是否存在?

答:

db.products.find({"things.bottle":{"$exists":true}})

2
When <boolean> is true, $exists matches the documents that contain the field, including documents where the field value is null. 从文档。
AlbertEngelB

1
是的,但是我不明白为什么一个数据库会包含null值,它很草率
Martijn Scheffer

3

我发现这对我有用

db.getCollection('collectionName').findOne({"fieldName" : {$ne: null}})
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.