2.4 MongooDB聚合管道
可以对集合中的文档数据进行变换和组合
// 通过
db.orders.aggregate([
{$match:{username:"zhangsan"}},
{$group:{age:30,total:{$sum:'$amount'}}}
])
上面的代码是先查到 username 是张三的人,然后对所有的张三进行分组 30岁的一组 不是三十的一组,这个操作会返回连个组合
常见的操作符
$project 添加 删除 命名 需要显示的列
$lookup 引入其他集合数据 关联查询
$match 条件匹配 满足条件筛选进入下一组管道 相当于mysql的have
$group 条件组合结果 统计 相当于 groupby
$sort 条件排序
$skip 跳过
$limit 限制数量
$unwide 拆分数组
$project 管道操作符
db.users.aggregate([{$project:{username:1}}])
// 表示 查找users 表 只显示 username 于find 第二个参数select 使用方式类似
$match 匹配
db.users.aggregate([{$project:{username:1}},{$match:{username:'zhangsan'}}])
// 相当于
db.users.find({username:'zhangsan'},{username:1})
$group 分组
group分组后可以进行统计
db.users.aggregate([
{$project:{username:1}},
{$match:{username:'zhangsan'}},
{$group:{_id:'$username',totle:{$sum:'$age'}}},
//注意 此处有一个再承参数前有一个$
])
$sort 排序
db.users.aggregate([
{$project:{username:1,age:1}},
{$match:{username:'zhangsan'}},
{$sort:{"age":1}}
//1 表示正序 -1 表示负序
])
$limit 限制条数
db.users.aggregate([
{$project:{username:1,age:1}},
{$match:{username:'zhangsan'}},
{$limit:2}
// 只返回2条
])
$skip 跳过几条
db.users.aggregate([
{$project:{username:1,age:1}},
{$match:{username:'zhangsan'}},
{$skip:2}
//跳过前两条
])
$lookup 用于表的关联操作
db.users.aggregate([
{
$lookup:{
from:"context", // 表示需要于哪个表进行关联
localField:"userID",//表示主查表users 的关联字段 userID
foreignField:"userID",//表示子表的context的关联字段 userID 这连个字段是相关联但是名称 不一定一样
as:"items"}},
//需要把数据放到什么字段内 这样就可以把查询到的数据放到items内
// items 是一个数组
{
$match:{ //$lookup 后使用match 对数据继续进行筛选
age:{
$gt:20
}
}
}
])
Last updated
Was this helpful?