1.数据mock
$project,$match,$group,$sort,$limit,$skip,$lookup表关联
//管道后面是数组,数组中是对象,每一个对象实现特定的功能
db.order.aggregate([{},{}])
order表
order_item表
1.1$project 查询指定的字段
//只选中order表order_id,all_price两条数据
db.order.aggregate([{$project:{order_id:1,all_price:1}}])
//以下效果相同
db.order.find({},{order_id:1,all_price:1})
1.2 $match 过滤文档。用法类似于find()方法中的参数
db.order.aggregate([{$project:{trade_no:1,all_price:1}},{$match:{all_price:{$gte:90}}}])
//以下效果相同
db.order.find({all_price:{$gte:90}},{all_price:1,trade_no:1})
//输出结果为
{ "_id" : ObjectId("5cd23aaa2d6748197416293c"), "trade_no" : "111", "all_price" : 100 }
{ "_id" : ObjectId("5cd23b093d9d191974e5e906"), "trade_no" : "222", "all_price" : 90 }
1.3 $group 将集合中的文件进行分组统计。
//以下order_id进行分组,对order_id的价格结构进行统计
db.order_item.aggregate([{$group:{_id:"$order_id",total:{$sum:"$price"}}}])
//输出
{ "_id" : "3", "total" : 12 }
{ "_id" : "2", "total" : 90 }
{ "_id" : "1", "total" : 100 }
1.4 $sort将集合中文档进行排序
db.order.aggregate([{$project:{all_price:1}},{$sort:{"all_price":-1}}])
1.5$limit限制几条
db.order.aggregate([{$project:{all_price:1}},{$limit:2}])
1.6 $skip跳过几条
db.order.aggregate([{$project:{all_price:1}},{$skip:1}])
1.7 $lookup表的关联操作
//实现以下数据结构
[
{
order_id:"1",
trade_no:"111",
items:[
{
title:"鼠标",
price:20
},
{
title:"键盘",
price:20
}
]
},
{
order_id:"2",
trade_no:"222",
items:[
{
title:"牛奶",
price:20
},
{
title:"酸奶",
price:20
}
]
}
]
db.order.aggregate([{$lookup:
{
from:"order_item",
localField:"order_id",
foreignField:"order_id",
as:"items"
}
}
])