MongoDB中的数据查询

准备数据

db.stu.insert({name:'郭靖',hometown:'蒙古',age:20,gender:true})
db.stu.insert({name:'黄蓉',hometown:'桃花岛',age:18,gender:false})
db.stu.insert({name:'杨康',hometown:'大金',age:20,gender:true})
db.stu.insert({name:'穆念慈',hometown:'大宋',age:18,gender:false})
db.stu.insert({name:'东邪',hometown:'桃花岛',age:40,gender:true})
db.stu.insert({name:'西毒',hometown:'西域',age:41,gender:true})
db.stu.insert({name:'南帝',hometown:'大理',age:42,gender:true})
db.stu.insert({name:'北丐',hometown:'大宋',age:45,gender:true})
db.stu.insert({name:'小甲',hometown:'大宋',age:45,gender:false})
db.stu.insert({name:'中神通',hometown:'全真教',age:44,gender:true})

基本查询

  • 方法 find()

    db.集合名称.find({条件文档})
  • 方法 findOne() 查询,只返回第一个

    db.集合名称.findOne({条件文档})

    这里写图片描述

  • 方法pretty() 将结果格式化

    db.集合名称.find({条件文档}).pretty()

    这里写图片描述

比较运算符

  • 等于,默认就是等于判断,没有运算符

    db.stu.find({age:18}) //查询所有年龄是18的同学
  • 小于:$lt

    db.stu.find({age:{$lt:18}})  //查询年龄小于18的同学
  • 小于等于:$lte

    db.stu.find({age:{$lte:18}}) //查询年龄小于等于18的同学
  • 大于: $gt

    db.stu.find({age:{$gt:18}})  //查询年龄大于18的同学
  • 大于等于: $gte

    db.stu.find({age:{$gte:18}})  //查询大于等于18的同学
  • 不等于: $ne

    db.stu.find({age:{$ne:18}})   //查询年龄不等于18的同学

逻辑运算符

  • 查询时有多个条件,多个条件之间需要通过逻辑运算符来连接

  • 逻辑与:默认的是逻辑与的关系

    // 查询年龄大于或等于18,并且性别为true的学生
    db.stu.find({age:{$gte:18},gender:true})

    这里写图片描述

  • 逻辑或:使用$or,值为数组,数组中每个元素为json

    // 查询年龄大于18,或性别为false的学生
    db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})

    这里写图片描述

  • and和or一起使用

    // 查询年龄大于18或性别为true的学生,并且学生的姓名为郭靖
    db.stu.find({$or:[{age:{$ge:18}},{gender:true}],name:'郭靖'})

    这里写图片描述

范围运算符

  • 使用$in,$nin判断是否在某个范围内

    // 查询年龄为18,28的学生
    db.stu.find({age:{$in:[18,28]}})

    这里写图片描述

正则表达式查询

  • mongodb提供的终端shell,同时也是一个js的执行器,可以编写js的代码和函数

  • 使用//或$regex编写正则表达式

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

    这里写图片描述

自定义查询

  • 使用$where后面写一个函数,返回满足条件的数据

    db.stu.find(
    {
        $where: function(){
          return this.age>30
        }
    }
    )

    这里写图片描述

Limit和skip

  • limit():用于读取指定数量的文档

    db.集合名称.find().limit(number)
    • 参数number:表示要读取文档的条数
    • 没有指定Number则显示集合中所有文档
    // 显示前两条学生的信息
    db.stu.find().limit(3)

    这里写图片描述

  • skip:用于跳过指定数量的文档

    db.集合名称.find().skip(number)
    • 参数number表示跳过的记录条数,默认值为0
  • limit和skip可以一起使用,不分先后顺序。

投影

  • 在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段

  • 语法:

    // 参数为字段与值,值为1表示显示,值为0不显示
    db.集合名称.find({},{字段名称:1,...})
  • 对于需要显示的字段,设置为1即可,不设置即为不显示

  • 特殊:对于_id列默认是显示的,如果不显示需要明确设置为0

排序

  • 方法sort(),用于对结果集进行排序

    db.集合名称.find().sort({字段:1,...})
  • 参数1为升序排列

  • 参数-1为降序排列

    // 排序 age  从小到大
    db.stu.find({},{name:1,age:1}).sort({age:1})

    这里写图片描述

统计个数

  • 方法count()用于统计结果集中文档条数

    db.集合名称.find({条件}).count()
    db.集合名称.count({条件})
  • 例子

    // 统计age大于18 的总人数
    db.stu.find({age:{$gt:18}}).count()
    db.stu.count({age:{$gt:18}})

    这里写图片描述

消除重复

  • 方法distinct()对数据进行去重

    db.集合名称.distinct('去重字段',{条件})
  • 例子:

    // 查找年龄大于18的学生,来自哪些省份
    db.stu.distinct('hometown',{age:{$gt:18}})

    这里写图片描述

猜你喜欢

转载自blog.csdn.net/pythoncodez/article/details/73658433