首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询mongodb,查找字段设置为空的文档,但不包括没有该字段的文档

查询mongodb,查找字段设置为空的文档,但不包括没有该字段的文档
EN

Stack Overflow用户
提问于 2020-01-15 17:15:00
回答 3查看 29关注 0票数 0

我目前正在试验mongodb,也就是mongoshell。

我希望获取tomato.consensus的值为null的文档。以下查询匹配1991年的文档。

代码语言:javascript
复制
    db.movieDetails.find({"tomato.consensus": null}

但一个不受欢迎的副作用是,它还将返回不带tomato.concensus字段的文档和根本不带西红柿字段的文档。

我的想法是使用$exists操作器。该查询返回362个文档。

代码语言:javascript
复制
    db.movieDetails.find({"tomato.consensus": {$exists: true})

我最初的想法是获取带有a字段tomato.consensus的文档,然后使用"tomato.consensus":null来提取文档。(不起作用):

代码语言:javascript
复制
    $db.movieDetails.find({"tomato.consensus": {$exists: true}}).find({"tomato.consensus": null})
    $uncaught exception: TypeError: db.movieDetails.find(...).find is not a function :

是否有一种语法允许同时执行这两种操作,以消除mongo shell中的副作用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-15 17:24:25

您只需要一个$and运算符并定义多个过滤条件

代码语言:javascript
复制
db.movieDetails.find( { $and: [ {"tomato.consensus": { $exists: true } }, {"tomato.consensus": null } ] } )

查找有关$and运算符和示例here的更多详细信息。

票数 1
EN

Stack Overflow用户

发布于 2020-01-15 17:23:36

您确实可以结合使用$exist和$and来检索存在"tomato.consensus“且为null的文档:

代码语言:javascript
复制
db.movieDetails.find( { $and: [ { "tomato.consensus": null }, { "tomato.consensus": { $exists: true } } ] } )
票数 1
EN

Stack Overflow用户

发布于 2020-01-15 17:28:34

这是nullundefined之间的主要区别。undefined始终为null,但在某些情况下,null并不是未定义的。

检查undefined可以通过以下方式完成:

1) {"tomato.consensus": { $exists: false } }

2) {"tomato.consensus": undefined }

因此,为了搜索空值而不是未定义的值,请使用query:

代码语言:javascript
复制
{'tomato.consensus': null, 'tomato.consensus': { $exists : true }}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59748193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档