• mongodb数据查询-小结


    mongodb数据查询
    目录:
    一、基本查询
    二、limit和skip
    三、投影
    四、sort排序
    五、统计个数
    六、消除重复

    ================================================================

    正文

    一、基本查询
    1、常用查询
    (1)find():查询,返回多条文档记录
    db.集合名称.find({条件文档})
    db.stu.find({age:18}) # 执行后,查找到所有age为18的文档记录

    (2)findOne():查询,只返回第一条文档记录
    db.集合名称.findOne({条件文档})
    db.stu.findOne({age:18}) # 执行后,查找到就近一条age为18的文档记录

    (3)美化pretty():将结果格式化
    db.集合名称.find({条件文档}).pretty()
    db.stu.find({age:18}).pretty() # 执行后,将结果格式美化后显示

    2、查询方式:比较运算符
    等于,默认是等于判断,没有运算符
    小于$lt
    小于或等于$lte
    大于$gt
    大于或等于$gte
    不等于$ne

    (1)查询名称等于'郭靖'的学生
    db.stu.find({name:'郭靖'})

    (2)查询年龄大于或等于18的学生
    db.stu.find({age:{$gte:18}}) # 执行后,显示age>=18的文档记录

    3、查询方式:逻辑运算符
    查询时可以有多个条件,多个条件之间需要通过逻辑运算符连接
    (1)逻辑与and:默认是逻辑与的关系
    例3:查询年龄大于或等于18,并且性别为true的学生
    db.stu.find({age:{$gte:18},gender:true})

    (2)逻辑或or:使用$or,值为数组,数组中每个元素为json
    例4:查询年龄大于18,或性别为false的学生
    db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})

    (3)and和or一起使用
    例5:查询年龄大于18或姓名是郭靖,并且性别为男生
    db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'郭靖'})

    4、查询方式:范围运算符
    使用"$in","$nin" 判断是否在某个范围内

    例6:查询年龄为18、28的学生
    db.stu.find({age:{$in:[18,28,30]}}) # 执行后,非连续,列举出age为18,28,30的所有文档记录。
    db.stu.find({age:{$nin:[18,28]}}) # 执行后,非连续,列举出age不为18,28的所有文档记录。

    5、查询方式:支持正则表达式
    mongodb提供的终端shell,同时也是一个js的执行器,可以编写js的代码和函数
    使用//或$regex编写正则表达式

    例7:查询姓黄的学生
    db.stu.find({name:/^黄/})
    db.stu.find({name:{$regex:'^黄'}})

    6、查询方式:自定义查询
    使用$where后面写一个函数,返回满足条件的数据

    例7:查询年龄大于30的学生。
    db.stu.find({
    $where:function() {
    return this.age>30;
    }
    })

    $where:后面接的是JavaScript的编程语法。
    如:https://www.cnblogs.com/svennee/p/4080805.html

    二、limit和skip
    (1)limit
    方法limit():用于读取指定数量的文档
    例1:查询2条学生信息
    db.stu.find().limit(2) # 执行后,显示2条文档记录

    (2)skip
    方法skip():用于跳过指定数量的文档
    例2:查询从第3条开始的学生信息
    db.stu.find().skip(2) # 执行后,除了前2条文档记录,其余的都显示出来。


    (3)skip和limit一起使用
    方法limit()和skip()可以一起使用,写法不分先后顺序,但是会先执行skip,后执行limit。
    例如:
    创建数据集
    for(i=0;i<15;i++){
    db.t1.insert({_id:i})
    }
    查询第5至8条数据
    db.t1.find().limit(4).skip(5) # 执行后,skip先排除前5条,limit再从结果集中取前4条

    db.t1.find().skip(5).limit(4) # 执行后,skip先排除前5条,limit再从结果集中取前4条

    三、投影
    在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段
    如:一个文档有5个字段,需要显示只有3个,投影其中3个字段即可
    语法:
    参数为字段与值,值为1表示显示,值为0不显示
    db.集合名称.find({},{字段名称:1,...})

    (1)对于需要显示的字段,设置为1即可,不设置即为不显示
    db.stu.find({},{name:1,gender:1})

    (2)特殊:对于_id列默认是显示的,如果不显示需要明确设置为0
    db.stu.find({},{_id:0,name:1,gender:1})


    四、sort排序
    方法sort(),用于对结果集进行排序
    语法
    db.集合名称.find().sort({字段:1,...})
    参数1为升序排列
    参数-1为降序排列

    例1:根据性别降序,再根据年龄升序
    db.stu.find().sort({gender:-1,age:1})


    五、统计个数
    方法count()用于统计结果集中文档条数
    语法
    db.集合名称.find({条件}).count()
    也可以与为
    db.集合名称.count({条件})

    (1)统计男生人数
    db.stu.find({gender:true}).count() # 返回一个数字。如:5

    (2)统计年龄大于20的男生人数
    db.stu.count({age:{$gt:20},gender:true}) # 返回一个数字。如:3

    六、消除重复
    方法distinct()对数据进行去重
    语法
    db.集合名称.distinct('去重字段',{条件})

    例:查找年龄大于18的学生,来自哪些省份
    db.stu.distinct('hometown',{age:{$gt:18}}) # 返回一个列表。如:[ "蒙古", "桃花岛", "大理", "华山" ]

  • 相关阅读:
    关于阿里云带宽监控指标记录
    mongodb备份还原
    squid3.5缓存代理实践记录
    kafka依赖zookeeper原因解析及应用场景
    Zookeeper+Kafka集群部署(转)
    dubbo框架提供Main方法运行容器的几种方式(转)
    html标签简介(常用)
    数据库中和表并列的其他对象
    外键约束
    数据库中的约束
  • 原文地址:https://www.cnblogs.com/andy9468/p/12612679.html
Copyright © 2020-2023  润新知