美文网首页
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