美文网首页
MongoDB 查询技巧(2) - null

MongoDB 查询技巧(2) - null

作者: Yellowtail | 来源:发表于2021-06-13 11:25 被阅读0次

概述

MongoDB 里面存的 文档, 字段可以 不存在, 可以 为 null, 可以是 具体的值
在开发过程中,经常需要去查询某个字段有值的所有文档, 那么此时怎么写才是正确且简单的呢?

数据准备

新建一个集合yu_fa_ce_shi
新增三条数据,如下图所示
a desc 字段为 null
b desc 字段有值,是一个字符串
c desc字段不存在

image.png

原始

我们之前查询有值的场景是这样写的

db.getCollection("yu_fa_ce_shi").find({
    desc: {
        $ne: null,
        $exists: true}
})

功能是正常的


image.png

现在我们来研究一下有没有简化的写法

eq(null)

db.getCollection("yu_fa_ce_shi").find({
    desc: null
})

执行之后可以看到,a b 都查询出来了,也就是说
eq(null) 等价于 有值且为null字段不存在 两种场景的并集(也就是in

image.png

ne(null)

再看一下反向的

db.getCollection("yu_fa_ce_shi").find({
    desc: { $ne: null}
})
image.png

执行之后得到结论:ne(null) 等价于 有值且不为null

字符串

由上可知 ne(null) 找到的是 有值且不为null, 但是因为 MongoDB 的字段可以随便存,类型没有限制
所以,ne(null) 对取出来的值类型没有做限制
那么,如果想要限制一下,比如: 有值且为 string 这种查询怎么写呢?

经过了解, MongoDB 有一种操作符叫 type type

截图看一下


type

所以我们的查询语句变为

db.getCollection("yu_fa_ce_shi").find({
    desc: {
        $type: 2
    }
})

结果如下,是符合我们预期的


image.png

null

那么问题来了,如何找到 有值且为null呢?
根据上面的 string, 同理可知

db.getCollection("yu_fa_ce_shi").find({
    desc: {
        $type: 10
    }
})
image.png

总结

  • 查询有值且不为null, 语句为 {$ne: null}
  • 查询没有有效值(不存在或者值为null), 语句为 {$eq: null}, 简化为 field: null
  • 查询有值且值是字符串, 语句为 {$type: 2}
  • 查询有值且值为null, 语句为 {$type: 10}

参考

type

相关文章

网友评论

      本文标题:MongoDB 查询技巧(2) - null

      本文链接:https://www.haomeiwen.com/subject/jqtteltx.html