200328-MongoDb系列教程九:文档 Document 查询基础篇

文章目录
  1. 1. 查询语法
  2. 2. 查询所有
  3. 3. 根据条件精准查询
  4. 4. 数字比较查询
  5. 5. 模糊查询
  6. 6. and条件
  7. 7. or条件
  8. 8. 限制返回成员
  9. 9. field类型查询
  10. 10. 存在查询
  • II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注
  • MongoDb文档查询,主要借助find方法来完成,在实际的业务开发中,为了满足各种复杂的业务场景,查询的姿势也是各种各样,本篇则主要介绍基本的使用姿势,不涉及到聚合、排序、分页相关内容

    1. 查询语法

    查询语法定义比较简单,复杂的是查询条件的组合;语法定义如下

    1
    db.collection.find(query, projection)
    • query: 查询条件,如果不填,则表示查询所有文档
    • projection: 查询需要返回的field,如果不填则返回所有的数据

    此外为了mongo-cli的返回结果更加友好,可以在最后添加.pretty(),使输出更友好

    2. 查询所有

    1
    db.doc_demo.find()

    3. 根据条件精准查询

    1
    db.doc_demo.find({'name': '一灰灰'})

    4. 数字比较查询

    对于数字类型的field,可以借助符号$gt(>), $get(>=), $lt(<), $lte(<=), $ne(!=) 来表示具体的操作

    1
    2
    3
    4
    5
    #查询age>18的文档
    db.doc_demo.find({'age': {$gt: 18}})

    # 查询age<20的文档
    db.doc_demo.find({'age': {$lt: 20}})

    5. 模糊查询

    在mysql中有一个like用于模糊查询,在mongodb中,同样支持基于正则的模糊查询

    1
    2
    3
    4
    5
    6
    7
    8
    # 查询name以灰灰结尾的文档
    db.doc_demo.find({'name': /灰灰$/})
    # 查询name中包含 lo 字符的文档
    db.doc_demo.find({'name': /lo/})
    # 查询name中包含l, g字符的文档
    db.doc_demo.find({'name': /l.g/})
    # 查询name以一灰灰开头的文档
    db.doc_demo.find({'name': /^一灰灰/})

    6. and条件

    多个查询条件需要满足时,并不需要什么特殊的操作,只需要在查询bson中,加上多个条件即可

    1
    2
    # 查询age > 18, 且name为 一灰灰blog的文档
    db.doc_demo.find({'age': {$gt: 18}, 'name':'一灰灰blog'})

    7. or条件

    和and不需要额外的操作不同,or条件需要借助 $or 来实现,语法如下

    1
    db.collection.find({$or: [{queyr1, query2}]})

    实例如下:

    1
    2
    # 查询age > 18, 且name为 一灰灰blog的文档 或 age < 20 且name为一灰灰的文档
    db.doc_demo.find({$or: [{'age': {$gt: 18}, 'name':'一灰灰blog'}, {'age': {$lt: 20}, 'name': '一灰灰'}]})

    8. 限制返回成员

    有些时候我们只需要获取文档中的部分成员,可以在第二个参数中进行指定,规则如下

    • 成员名: 1: 表示这个成员需要返回
    • 成员名: 0: 表示这个成员不返回
    1
    2
    3
    4
    5
    # 表示返回的结果中,除了_id之外,其他的正常返回
    db.doc_demo.find({}, {'_id': 0})

    # 表示返回的结果中,除了_id之外,就只要name和age
    db.doc_demo.find({}, {'name': 1, 'age': 1})

    请注意,一般在使用了 成员名: 1 来指定返回field时,会自动返回_id,如果不需要,请显示加上 _id: 0

    9. field类型查询

    根据field的成员类型来作为查询条件,一般有两种方式,这里只介绍更优雅的,语法如下

    1
    {field: {$type: '类型'}}

    举例说明

    1
    db.doc_demo.find({'skill': {$type: 'array'}})

    10. 存在查询

    mongodb的一个特点就是集合的结构不固定,所以某个成员可能存在也可能不存在,所以当我们的查询条件中需要加一个是否存在的判断时,可以如下

    1
    2
    3
    4
    # 查询tag存在的文档
    db.doc_demo.find({'tag': {$exists:true}})
    # 查询tag不存在的文档
    db.doc_demo.find({'tag': null})

    II. 其他

    1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

    一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

    2. 声明

    尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    3. 扫描关注

    一灰灰blog

    QrCode

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×