一、聚合操作
常用管道:
$group:将集合中的文档分组,可用于统计结果
$match:过滤数据,只输出符合条件的文档
$project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
$sort:将输入文档排序后输出
$limit:限制聚合管道返回的文档数
$skip:跳过指定数量的文档,并返回余下的文档
$unwind:将数组类型的字段进行拆分
常用表达式:
$sum:计算总和,$sum:1 同count表示计数
$avg:计算平均值
$min:获取最小值
$max:获取最大值
$push:在结果文档中插入值到一个数组中
$first:根据资源文档的排序获取第一个文档数据
$last:根据资源文档的排序获取最后一个文档数据
为了便于后续操作,创建以下集合:
1.1 $group
1.1.1 统计学生总人数、平均年龄:
1.1.2 分别统计男生、女生的总人数:
1.1.3 分别统计男生、女生的平均成绩:
1.2 $match
1.2.1 统计年龄大于15的男生、女生人数:
1.2.2 统计成绩大于80的男生、女生人数:
1.2.3 统计成绩低于80的人数及具体人名字:
1.3 $sort、$skip、$limit
统计成绩大于80的男生、女生人数,统计结果按升序排序,只显示第二条数据:
二、索引
2.1 索引概念
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件
并选取那些符合查询条件的记录,这种扫描全集合的查询效率是非常低的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值
进行排序的一种结构。
以下创建一个测试集合,循环插入10万个文档
2.2 查询性能测试
使用explain()命令进行查询性能分析,其中executionTimeMillis字段表示整体查询时间,单位是毫秒
2.3 索引建立
建立索引语法:db.集合.ensureIndex({属性:1})
1表示升序,-1表示降序
对集合中的name字段进行建立索引
对建立索引的字段进行查询性能测试,查询时间几乎可以忽略不计
建立联合索引,即对多个字段同时建立索引
后台建立索引
在前台创建索引期间会锁定数据库,会导致其它操作无法进行数据读写,在后台创建索引是,会定期释放写锁,
从而保证其它操作的运行,但是后台操作会在耗时更长,尤其是在频繁进行写入的服务器上。
background可指定以后台方式创建索引,即增加 "background" 可选参数。"background" 默认值为false。
2.4 查看索引
语法:db.集合名称.getIndexes()
2.5 删除索引
删除指定索引:db.集合名称.dropIndex("索引名称"),索引名称可以通过getIndexes()命令查看
删除全部索引:db.集合名称.dropIndexes()