MongoDB 的高级查询 aggregate 聚合管道练习

数据模拟

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

在这里插入图片描述
在这里插入图片描述

练习

  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. 在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}}
	])

在这里插入图片描述

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值