【MongoDB】数据的高级查询02

2.4高级查询

2.4.1数据查询

find(): 查询
    db.集合名称.find({条件文档})
findOne():查询,只返回第个
    db.集合名称.findOne({条件文档})
pretty(): 将结果格式化
    db.集合名称.find({条件文档}).pretty()

2.4.2比较运算符

等于: 默认是等于判断, 没有运算符
小于:$lt (less than)
小于等于:$lte (less than equal)
大于:$gt (greater than)
大于等于:$gte
不等于:$ne

db.stu.find({age:{$gte:18}})

1.4.3逻辑运算符

and:在json中写多个条件即可
查询年龄⼤于或等于18, 并且性别为true的学⽣
db.stu.find({age:{$gte:18},gender:true})

or:使⽤$or, 值为数组, 数组中每个元素为json
查询年龄⼤于18, 或性别为false的学⽣
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})

查询年龄⼤于18或性别为男⽣, 并且姓名是郭靖
db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})

2.4.4范围运算符

使⽤"$in", "$nin" 判断是否在某个范围内
查询年龄为18、 28的学⽣
db.stu.find({age:{$in:[18,28]}})

2.4.5正则表达式

使⽤//或$regex编写正则表达式
查询姓⻩的学⽣
db.stu.find({name:/^⻩/})
db.stu.find({name:{$regex:'^⻩'}})

2.4.6limit和skip的使用

limit(): ⽤于读取指定数量的⽂档
skip(): ⽤于跳过指定数量的⽂档
同时使用
db.集合名称.find().limit(NUMBER)
查询2条学⽣信息
db.stu.find().limit(2)

方法skip()用于跳过指定数量的文档
db.集合名称.find().skip(NUMBER)
db.stu.find().skip(2)

同时使用
db.stu.find().limit(4).skip(5)
或
db.stu.find().skip(5).limit(4)

2.4.7自定义查询

使⽤$where后⾯写⼀个函数, 返回满⾜条件的数据
查询年龄⼤于30的学⽣
db.stu.find({
    $where:function() {
        return this.age>30;}
})

2.4.8投影

在查询到的返回结果中, 只选择必要的字段
db.集合名称.find({},{字段名称:1,...})
参数为字段与值, 值为1表示显示, 值为0不显
特殊: 对于_id列默认是显示的, 如果不显示需要明确设置为0

db.stu.find({},{_id:0,name:1,gender:1})

2.4.9排序

⽅法sort(), ⽤于对  集进⾏排序
db.集合名称.find().sort({字段:1,...})
参数1为升序排列
参数-1为降序排列
根据性别降序, 再根据年龄升序
db.stu.find().sort({gender:-1,age:1})

2.4.10统计个数

⽅法count()⽤于统计结果集中⽂档条数
db.集合名称.find({条件}).count()
db.集合名称.count({条件})
db.stu.find({gender:true}).count()
db.stu.count({age:{$gt:20},gender:true})

2.4.11消除重复

⽅法distinct()对数据进⾏去重
db.集合名称.distinct('去重字段',{条件})
db.stu.distinct('hometown',{age:{$gt:18}})

2.4.12聚合aggregate

聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
db.集合名称.aggregate({管道:{表达式}})

> db.student.aggregate({$group:{_id:null,total:{$sum:'$age'}}})
{ "_id" : null, "total" : 134 }
> db.student.aggregate({$group:{_id:null,avg:{$avg:'$age'}}})
{ "_id" : null, "avg" : 22.333333333333332 }
> db.student.aggregate({$group:{_id:null,max:{$max:'$age'}}})
{ "_id" : null, "max" : 26 }
> db.student.aggregate({$group:{_id:null,min:{$min:'$age'}}})
db.student.aggregate({$group:{_id:null,count:{$sum:1}}})

2.4.13常用管道

在mongodb中,⽂档处理完毕后, 通过管道进⾏下⼀次处理
常用管道如下:
$group: 将集合中的⽂档分组, 可⽤于统计结果
$match: 过滤数据, 只输出符合条件的⽂档
$project: 修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
$sort: 将输⼊⽂档排序后输出
$limit: 限制聚合管道返回的⽂档数
$skip: 跳过指定数量的⽂档, 并返回余下的⽂档
$unwind: 将数组类型的字段进⾏拆分
处理输⼊⽂档并输出
语法:表达式:'$列名'
常⽤表达式:
$sum: 计算总和, $sum:1 表示以⼀倍计数
$avg: 计算平均值
$min: 获取最⼩值
$max: 获取最⼤值
$push: 在结果⽂档中插⼊值到⼀个数组中
$first: 根据资源⽂档的排序获取第⼀个⽂档数据
$last: 根据资源⽂档的排序获取最后⼀个⽂档数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值