mongdb--聚合操作
mongodb可以基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
语法:db.集合名称.aggregate({管道:{表达式}})
常用管道命令
在mongodb中,文档处理完毕后, 通过管道进行下⼀次处理 常用管道命令如下:
$group: 将集合中的文档分组, 可用于统计结果
$match: 过滤数据, 只输出符合条件的⽂档
$project: 修改输入文档的结构, 如重命名、 增加、 删除字段、 创建计算结果
$sort: 将输入文档排序后输出
$limit: 限制聚合管道返回的文档数
$skip: 跳过指定数量的文档, 并返回余下的文档
常用表达式
表达式:处理输⼊⽂档并输出 语法:表达式:'$列名' 常⽤表达式:
$sum: 计算总和, $sum:1 表示以⼀倍计数
$avg: 计算平均值
$min: 获取最小值
$max: 获取最⼤值
$push: 在结果⽂档中插⼊值到⼀个数组中
使用注意点:
$group
- $group是所有聚合命令中用的最多的一个命令,用来将集合中的文档分组,可用于统计结果
db.stu.aggregate({$group:{_id:"$gender",counter:{$sum:1}}})
其中注意点:
- db.db_name.aggregate是语法,所有的管道命令都需要写在其中
- _id 表示分组的依据,按照哪个字段进行分组,需要使用$gender表示选择这个字段进行分组
- $sum:1 表示把每条数据作为1进行统计,统计的是该分组下面数据的条数
$match
$match用于进行数据的过滤,是在能够在聚合操作中使用的命令,和find区别在于$match 操作可以把结果交给下一个管道处理,而find不行
mogodb----索引
使用索引可以:加快查询速度,进行数据的去重两大优势
创建批量的数据 10W 测试的数据
for (var index = 0; index < 100000; index++) {db.st.insert( {_id:index,name:"name"+index,age:index})}
查看 数据的时间,对比毫秒
- 查看 数据的时间 对比 毫秒 db.xx.find().explain('executionStats')
- 查看 _id 单位毫秒 db.st.find({_id:199999}).explain('executionStats')
- 查看 name,单位毫秒 db.st.find({name:"name199999"}).explain('executionStats')
设置 ID索引ensureIndex
- 语法:db.xx.ensureIndex({字段:1})
- 创建单个索引: db.stu.ensureIndex({age:1})
- 创建联合索引: db.stu.ensureIndex({name:1,age:1})
查询和删除索引
- 删除 自定义的索引
db.stu.dropIndex("age_1")- 查询 所有的索引
db.st.getIndexes()