小程序一次性订阅消息,订阅1次可以发送1条消息,订阅10次可以发送10条消息。
1. 前情提要,完成订阅到发送的过程
订阅部分参考 实战分享: 小程序云开发玩转订阅消息 就可以完成从小程序订阅、存入云开发数据库、利用定时触发器定期发送消息了。
完成上面的步骤,你应该已经在云端做到了:
- 定时任务
- 查询所有订阅消息
- 循环发送消息
- 发送后根据
_id
标记状态为已发送
但是上文的订阅消息,适用于只订阅一次的情况,查看github的源码,甚至为了避免重复,同一个用户不能订阅多次。
我们要做的逻辑是,同一个一次性订阅消息,用户可以订阅多次,订阅几次就发送几次。
2. 改造查询,支持每个用户只发送一条
保存处代码不用修改,用户多次订阅就会插入多条记录。查询代码需要做修改,目前的查询代码是这样的:
const messages = await db
.collection('messages')
.where({
done: false,
})
.get();
查询到了所有未发送的消息,此时一个用户订阅2次,都会查出来,并收到2条订阅消息。
我们使用 agg