数据库(27)mongodb(下)
2018-09-30 本文已影响0人
錦魚
limit和skip
limit()
用于读取指定数量的文档
db.wzry.find().limit(2)
skip()
用于跳过指定数量的文档
db.wzry.find().skip(2)
自定义查询
- 使⽤$where后⾯写⼀个函数, 返回满⾜条件的数据
<\!-- 查询年龄大于5的人物 -->
db.wzry.find({
$where:function(){
return this.age>5;
}
})
投影:
在查询到的返回结果中, 只选择必要的字段
- 语法
* db.集合名称.find({},{字段名称:1,...}) * 参数为字段与值, 值为1表示显示, 值为0不显 * 特殊: 对于_id列默认是显示的, 如果不显示需要明确设置为0
例子:
db.wzry.find({},{_id:0,name:1,gender:1})
排序:
- ⽅法sort(), ⽤于对结果集进⾏排序
- db.集合名称.find().sort({字段:1,...})
- 参数1为升序排列
- 参数-1为降序排列
-- 按照age升序排序
db.wzry.find().sort({age:1})
统计个数
- 方法:count() ⽤于统计结果集中⽂档条数
- db.集合名称.find({条件}).count()
- db.集合名称.count({条件})
举例
-- 统计年龄大于等于5的人物
db.wzry.find({age:{\$gte:5}}).count() db.wzry.count({age:{\$gte:5}})
消除重复
方法:distinct() 对数据进行去重
- db.集合名称.distinct('去重字段',{条件})
举例
-- 查看所有职业种类 db.wzry.distinct('type')
mongodb聚合和管道
聚合
- 聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
db.集合名称.aggregate({管道:{表达式}})
常用管道
- 在mongodb中,⽂档处理完毕 后, 通过管道进⾏下⼀次处理
常用管道如下:
- $group 将集合中的⽂档分组, 可⽤于统计结果
- $match过滤数据, 只输出符合条件的⽂档
- $project修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
- $sort将输⼊⽂档排序后输出
- $limit限制聚合管道返回的⽂档数(一页存放的数量)
- $skip跳过指定数量的⽂档, 并返回余下的⽂档(页数)
- $unwind将数组类型的字段进⾏拆分
表达式
- 处理输⼊⽂档并输出
- 语法:表达式:'$列名'
常用表达式:
- $sum计算总和, $sum:1 表示以⼀倍计数
- $avg计算平均值
- $min获取最⼩值
- $max获取最⼤值
- $push在结果⽂档中插⼊值到⼀个数组中
- $first根据资源⽂档的排序获取第⼀个⽂档数据
- $last根据资源⽂档的排序获取最后⼀个⽂档数据
group
$group
- 将集合中的文档分组,可用于统计结果
- _id表示分组的依据,使用某个字段的格式为'$字段'
- 例1: 统计男生、女生的总人数
db.stu.aggregate(
{
$group:{
_id:'$gender',
counter:{$sum:1}
}
}
)
Group by null
- 将集合中所有文档分为一组
- 例2:求学生总人数、平均年龄
db.stu.aggregate(
{
$group:
{
_id:null,
counter:{$sum:1},
avgAge:($avg:'$age')
}
}
)