【记一次微信小程序云开发联表聚合查询,包括表联接、分组统计等实现】

记一次微信小程序云开发联表聚合查询

以步数排行榜为例
关键词:小程序开发,云函数,多表联接,left join,分组聚合,分组统计,分组求和

排行榜数据组成

一、数据总览

  1. user表(存储用户基本信息)
open_idnamehead_url
1张三http://www.xxx.com/img1
2李四http://www.xxx.com/img2
3王五http://www.xxx.com/img3
  1. step表(存储用户的历史步数)
open_idstep_numscreate_time
1111120xx/xx/xx
1222220xx/xx/xx
2333320xx/xx/xx
  1. thumbs表(存储排名点赞数据)
open_idfans_idcreate_time
1220xx/xx/xx
1320xx/xx/xx
2320xx/xx/xx
  1. 查询结果
open_idnamehead_urlstepsthumbs_num
1张三http://www.xxx.com/img133332
2李四http://www.xxx.com/img233331
3王五http://www.xxx.com/img300

二、上代码

db.collection('user').aggregate()
	.lookup({
	  from:"step",
	  let:{
	    order_openid:"$open_id"
	  },
	  pipeline: $.pipeline()
	  .match(_.expr($.eq(['$open_id','$$order_openid'])))
	  .group({
	    _id:'$open_id',
	    steps:$.sum('$step_nums')
	  })
	  .done(),
	  as: "nstep"
	})
	.lookup({
	  from:"thumbs",
	  let:{
	    order_openid:"$open_id"
	  },
	  pipeline: $.pipeline()
	  .match(_.expr($.eq(['$open_id','$$order_openid'])))
	  .done(),
	  as: "nthumbs"
	})
	.addFields({thumbs_num:$.size('$nthumbs')})
	.replaceRoot({
	  newRoot:$.mergeObjects([$.arrayElemAt(['$nstep',0]),'$$ROOT'])
	}).project({
	  _id:0,
	  nstep:0,
	  nthumbs:0,
	  create_ime:0,
	})
	.sort({'steps':-1})
	.limit(100)
	.end()

三、思路分析

后面再写吧,夜深了,注释也后面再补吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值