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: 根据资源⽂档的排序获取最后⼀个⽂档数据