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"}}])
