数据模拟
db.orders.insert([
{"order_id":1,uid:10,'trade_no':111,'all_price':100,"all_num":2},
{"order_id":2,uid:7,'trade_no':22,'all_price':90,"all_num":2},
{"order_id":3,uid:8,'trade_no':33,'all_price':80,"all_num":6},
])
db.order_item.insert({'order_id':1,title:'机械鼠标1',price:50,num:1})
db.order_item.insert({'order_id':1,title:'机械键盘2',price:50,num:1})
db.order_item.insert({'order_id':2,title:'苹果',price:50,num:1})
db.order_item.insert({'order_id':2,title:'香蕉',price:30,num:1})
db.order_item.insert({'order_id':3,title:'手机',price:5000,num:1})
db.order_item.insert({'order_id':3,title:'电脑',price:8000,num:1})
练习
- 要求查找 order集合 只返回文档中trade_no 和 all_price 字段
db.orders.find({},{trade_no:1,all_price:1,_id:0})//没有返回_id
db.orders.aggregate([
{$project:{trade_no:1,all_price:1}}
])
- 在1的基础上查找all_price大于等于90的文档,,并按升序排序
db.orders.find({all_price:{$gte:90}},{trade_no:1,all_price:1}).sort({all_price:1})
db.orders.aggregate([
{$project:{trade_no:1,all_price:1}},
{$match:{all_price:{$gte:90}}},
{$sort:{all_price:1}}
])
- 将集合中的文档进行分组,可用于统计结果。统计每个订单的订单数量,按照订单号分组
db.order_item.aggregate([
{$group:{_id:'$order_id',total:{$sum:'$num'}}}
])
原集合:
查询后:
4.关联两个集合查询,多返回一个字段goodList包含商品数组
db.orders.aggregate([
{
$lookup:{
from:'order_item',
localField:'order_id',
foreignField:'order_id',
as:'goodList'
}
}
])