老师您好,我有个关于云数据库的问题请教下

来源:10-1 课程回顾

xphao

2020-04-29

我现在有这么一个需求,就是我有三个集合,A集合存放的是文章,B集合存放的是用户数据,当用户点赞一篇文章,就把用户openid以及文章包含的数据存入C集合。

操作一:当我获取该文章点赞人数,就去查C集合里面该文章id的出现次数。

操作二:当我获取用户喜欢文章数以及展示对应文章内容,就去查C集合含有对应用户openid的数据。

操作三:我经常需要去刷新文章点赞人数,比如用户每次切换到自己喜欢文章页面,这里展示的文章的点赞数我就要去刷新一次,当用户喜欢30篇文章,我就要去调用30次操作一

我想请问下老师,我上面的操作逻辑有问题吗?有可以优化的地方吗?
文章数量以及用户量都是在几十到几百的数据量吧。

写回答

2回答

谢成

2020-04-29

1、查询数量可以用count来做: https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/collection/Collection.count.html

也就是说当用户喜欢的文章有30篇,也只是在操作一中去count一次,不是30次,这样能效率高一些。。

2、文章的点赞数,我觉得可以直接存在文章的集合中。因为如果参考目前微博的功能,点赞数一般是和文章一同显示的,这样只要查询这一个集合就可以了。每次有用户点赞,这个字段就+1,要用inc来做: https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/command/Command.inc.html 因为具有原子性,多个用户同时点赞不会相互干扰。

另外如果还需要保存是哪个用户点了赞的话,可以像你所做的,在C中存一份,但这个C只有在用户点击去看谁点了赞才去查,而不是每篇文章都去查,这样能效率高一些。


1
1
xphao
老师,我补充了问题,麻烦您有空时回复下~
2020-04-29
共1条回复

xphao

提问者

2020-04-29

老师,我再梳理一遍我的问题吧。


假设有两个页面,a页面和b页面。


(1)a页面是展示文章的,文章会显示点赞未点赞两种状态,要是按老师您说的把点赞数量直接和文章数据一起存放在A集合,那我应该怎么判断用户当前是否点赞过该文章?还是通过把文章数据和用户openid一起放入C集合,展示文章时再拿文章id和openid出来判断吗?


(2)b页面是展示用户喜欢文章列表的,会有文章的简介以及文章对应点赞数量,为了确保用户及时获取到准确的数据,所以我的想法是每当用户切换到该页面,也就是生命周期onshow()就会去获取每个文章对应的点赞数量。如果当前用户喜欢30篇文章,我要去刷新一遍该用户喜欢文章显示的点赞数量,是只能去调用30次我问题里提及的操作一吗?还是说有更合适的做法?


问题比较长,麻烦老师了~

类似下图的效果

//img1.sycdn.imooc.com/szimg/5ea95f6209137f2906040783.jpg

//img1.sycdn.imooc.com/szimg/5ea95f6f09493f8b08280518.jpg


0
0

微信小程序云开发-从0打造云音乐全栈小程序

横跨小程序端、云后端、CMS一站式云开发的小程序全栈课程

1938 学习 · 2768 问题

查看课程