写点什么

MongoDB 中的 null 类型查询

用户头像
Kylin
关注
发布于: 2021 年 03 月 21 日
MongoDB中的null类型查询

MongoDB 支持多种类型的数据。其中一些类型再查询时会有特别的表现。这篇我们来说说在 MongoDB 中特殊类型 —— null 类型的查询语法。


有一个包含如下文档的集合:

> db.ecosystem.find(){ "_id" : ObjectId("6055443e63d8bae73fc0f506"), "x" : 1, "y" : null }{ "_id" : ObjectId("6055444e63d8bae73fc0f507"), "x" : 2, "y" : "one" }{ "_id" : ObjectId("6055445f63d8bae73fc0f508"), "x" : 4, "y" : "two" }>
复制代码

现要查询“y”键为 null 的文档:

> db.ecosystem.find({'y':null}){ "_id" : ObjectId("6055443e63d8bae73fc0f506"), "x" : 1, "y" : null }>
复制代码


这里提一点,null 不仅会匹配某个键的值为 null 的文档,而且还会匹配不包含这个键的文档。例如,下面这个查询,文档中是不包含“none”这个键的,所以查询“none”键为 null 会返回缺少这个键的所有文档:

> db.ecosystem.find({'none':null}){ "_id" : ObjectId("6055443e63d8bae73fc0f506"), "x" : 1, "y" : null }{ "_id" : ObjectId("6055444e63d8bae73fc0f507"), "x" : 2, "y" : "one" }{ "_id" : ObjectId("6055445f63d8bae73fc0f508"), "x" : 4, "y" : "two" }>
复制代码

所以,如果仅仅是想匹配键为 null 的文档,既要检查该键的值是否为 null,还要通过“$exists”条件判定键值已存在:

> db.ecosystem.find({"none":{"$in":[null],"$exists":true}})>>
复制代码

很明显,这里是查询不到记录出来的。


这里需要注意的一点是,MongoDB 是没有“$eq”操作符的,所以 $in:[null] 这条查询看起来不精简,但是使用一个元素的“$in”操作符效果是一样的。

用户头像

Kylin

关注

现实的理想主义者 2019.10.08 加入

【坐标】:魔都 【品种】:程序媛 【标签】:技术宅、大吃货 【追求】:改变世界、改变自己 【信条】:每次前进一小步

评论

发布
暂无评论
MongoDB中的null类型查询