小程序·云开发的数据库,是一个既可在前端操作、也能在云函数中读写的json数据库,对外提供丰富的数据库API。从满足基础可用性到现在,已能够满足中大型小程序的要求。
那么,基于云开发数据库,你做过哪些有意思的小程序实践呢?在这个话题中,我们面向广大开发者(包括个人和企业)征集云开发数据库的使用案例,优秀的案例将有机会获得官方专属访谈与“微信开发者”官方公众号推送宣传分享。
案例分享建议包括云开发数据库使用背景与需求,可提供脱敏的代码示例与数据。
参与#云开发#系列话题并提供高质量回答或建议者即有机会获得微信相框Classic一台,快来参加吧!
*获奖情况将在后续「社区每周」公告中公示,如获访谈机会将有官方运营专员通过社区私信联系作者,请及时留意社区私信
*使用小程序云开发过程中的如有疑问或Bug反馈,可在社区云开发版块发帖交流
我做了两款小程序,都使用了云数据库。
1、小确幸丨记录生活小美好
利用聚合,一次查询直接关联用户表,计算是否点赞和管理权限。
利用聚合实现 一次查询,直接返回用户表和内容表的关联,同时用聚合计算出是否点赞、是否有操作权等内容。
之前没有使用聚合的时候,写了三个表,用户表、帖子表、喜欢表。查询需要大量代码,因为每个帖子都需要查询作者和喜欢信息,一度在循环体里嵌套查询语句,代码不好看就算了,效率还特别慢,用户体验较差。
使用聚合之后,直接一次查询解决了,省了大量逻辑代码,用户基本也是秒开,爽啊!
改造先后对比:
之前: 上百行代码,多次查询,需要单独判断函数,处理时间在2000ms以上
之后:一行代码,一次查询,直接查询时算出权限,处理时间在300ms以内
核心代码:
const query = [{ //0我的 '_openid': OPENID }, { //1公开 public: true }, { //2喜欢 likes: db.command.all([OPENID]) // likes: $.in([OPENID, '$likes']) }, { //3本周 // createTime: $.gte(['$createTime', getCurDate('weekStart')]) // createTime: _.gte(getCurDate('weekStart')) }, { //4指定 _id: event.id } ] let listData = await db.collection('post').aggregate() .match(query[event.listType]) .sort({ createTime: -1 }) .skip(20 * (event.pageNum - 1)) .limit(20) .lookup({ from: "user", localField: "_openid", foreignField: "_id", as: "postList" })//和用户表关联 .replaceRoot({ newRoot: $.mergeObjects([$.arrayElemAt(['$postList', 0]), '$$ROOT']) })//将用户表信息放到根节点上 .addFields({ day: $.dayOfMonth('$createTime'), month: $.month('$createTime'), year: $.year('$createTime'), time: $.dateToString({ date: '$createTime', format: '%Y年%m月%d日' }), isLike: $.in([OPENID, '$likes']), //判断这个帖子是否喜欢 isLiked: $.in([OPENID, '$liked']), //判断这个帖子是否喜欢过 isAuthor: $.eq(['$_openid', OPENID]), //判断这个帖子是否为作者 isAdmin: $.eq([OPENID, 'oy0T-4yk7lCRFGDefpFC4Yvx_ppU']),//判断是否有管理员权限 like: $.size('$likes'), //喜欢数 }) .project({ postList: 0, userInfo: 0, liked: 0, likes: 0, city: 0, province: 0, country: 0, language: 0, nlp: 0, saveType: 0, })//清除掉不需要的字段 .end()
详细解析:https://developers.weixin.qq.com/community/develop/article/doc/0000ce1ac5c46874855ac2c1051013
2、产品笔记丨发现优秀产品细节
利用数据库高级操作更新文章。
这款小程序因为内容全是自己创作,所以在上传作品的时候非常“偷懒”的使用了云开发的高级操作直接上传作品,这样一来,省去了后台和做不必要的界面,非常方便,数据操作非常方便。
新增操作:
效果如下:
作为一名独立开发者,当看到小程序支持云开发可以不需要自己购买服务器时甚是开心。毕竟因为自己太穷了[苦笑]
作为一名JAVA开发工程师,第一次接触云开发的时候大概是在19年4月份吧
给我的感觉云开发最大的优点是:1、基础配额版可以免费使用;2、接口的云调用比HTTPS调用简单;3、提供云存储;4、可以快速试错(有些公司可能会先用云开发版快速开发一个小程序投入市场,入场市场反应不错,后续再加大开发投入)
当然有优点肯定也有缺点:1、不能多表关联查询;2、并发数有限,这点对于个人开发者来说估计问题不大;3、云函数数量有限制,所以开发的时候需要注意规划好;4、一但使用云开发,将来如果想再迁移到云服务器成本较大
目前我自己开发的恋人小清单就是用的云开发。虽然功能不多。但是写了一堆的云函数。目前有43个
一开始不知道云函数有数量的限制,所以基本是加一个功能,我就会加一个云函数。。。大家在做云开发的时候需要注意一下
目前的资源使用情况
总体来说,云开发个人还是蛮喜欢。接下来还会继续使用云开发
下面介绍一下我第一个使用云开发的小程序恋人小清单
恋人小清单是用照片和文字记录情侣恋爱点滴,在多年以后再看到时,内心还会为之感动的恋爱时光。没有华丽的辞藻,但却有最美好的回忆
最初开发这个小程序是为了送女朋友作为生日礼物。上线后发现居然还有其他用户也在使用,于是也就继续搞下去了哈哈哈哈
大家可以扫码体验一下
分享一下我云开发.云数据库的开发经历:
总共独立开发了约10个小程序,基本上全部都多多少少运用了云开发。
分为两种开发模式:
一、完全云开发模式
课博
初衷是做一个付费内容平台的SaaS,因为当时有几个教育行业的朋友都想做这种东西,于是就想做一个共用平台给大家用;
现在做成了一个付费内容的准论坛的东西。
功能:
1、用户发布文章(图片、文字和视频),采用云数据库单表结构;
2、tabs模式的文章分类展示;
3、仿头条的回复评论点赞系统,独立体系,做成代码片段,以供其它小程序集成;
4、集成的简易CMS管理平台;分为管理员入口和文章审核及运营员入口;
5、微信支付。在云支付推出之前就已经完美的云开发支付功能;
6、数据库表包括:
content(文章内容表)
Comment(评论回复表)
User(用户表)
Payment(支付表)
Content2user(用户与内容关系表,包括阅读、收藏、点赞、支付、关注)
Roles(cms角色表)
poster(楼主信息表)
Follow(关注表)
二、混合模式
传统模式+云开发模式
除了业务逻辑和数据库,其他与微信相关的功能全部云开发实现,后台采用nginx+nodejs+koa2+mongo架构。
将各种功能做成代码片段,以供其他小程序集成。
作为独立开发者,就没有必要做成插件和自定义组件,费力不说,还没有代码片段直接拷贝过来方便。
各种独立模块代码片段包括:
1、云开发支付(不是云支付)。通过云函数调用微信支付api,已实现微信支付全部功能,统一下单、查询、退款等;完美解决没有notify_url回调的问题,完美解决用户不点击完成直接锁屏的异常操作问题;数据库表payment
2、独立的仿头条评论系统,可集成在任何小程序的主内容上,包括评论、回复、点赞;可以直接实现买家点评、影评、文章评论、论坛、问题解答、用户反馈等各种需求;数据库表:comment,单独大表,储存以上信息。
3、订阅消息机制;实现用户授权次数记录,消息量不足提醒。数据库表:msg记录每个用户的订阅数,实现对用户订阅消息的管理。
4、安检及云存储文件管理系统。包括内容安检,由于采用上传fileID到云函数的方式,必然造成文件垃圾,如何清理是个难题,与其在业务逻辑上小心翼翼地考虑各种意外,及时清理fileID,还不如统一清理,本模块用来解决这个问题;数据库表:cloudFiles,记录每个fileID的信息。
5、用户登录模块。用户授权、电话号码、openid和unionid。数据库表user,储存以上信息。
6、其他ocr及openapi的通用模块;
云开发,微信已经在serverless上走在了最前列,真的是越来越好用了。但是对我们这些老手却是越来越郁闷了,本来还可以有点技术得瑟一下,结果现在连小白也可以直接上手了。我们开发员要失业了,设计和产品经理都可以直接码代码了。
#云开发# 云数据库真的非常简单好用。
我的小程序里为用户建立了成长体系,可以通过签到和分享获得积分。所以用云数据库为用户建立数据档案是非常高效的办法。只需要用云函数中对数据库进行添加和更新操作就可以了。
强烈建议不要使用小程序端的api对数据库进行操作!
尽量在云函数中对数据库进行操作,安全、可控。毕竟数据是很贵重的。
欢迎大家试试看。也欢迎大家来与我交流开发心得。
该小程序现已开源,地址https://gitee.com/samkee/lottery-miniprogram
自从用了云开发,越用越爽,废话不多说,后面介绍下我花了半个月做的抽奖小程序。
半个月前注册了“抽奖精选”这个小程序,然后前天审核上线成功。
后面先给大家看下小程序截图:
接着给大家看下我云开发的集合以及云函数
后面介绍下我的小程序所需要的云函数。
lottery云函数
就像上图那样,通过前端的action来执行不同的业务逻辑,使用非常方便,代码也很清晰。
user云函数
授权登录相关逻辑
结语:希望大家能大胆地拥抱云开发,无须配置繁琐的开发环境,专注业务逻辑。云开发底层已经实现并发处理,性能也是杠杠的。
大家有兴趣的话,可以加我微信沟通学习,一起进步!
感恩一下:云开发团队辛苦了,小程序开发者能发展这么快,因为站长你们这些巨人带来的巨人作品的肩膀上!
一、开发背景和使用环境介绍:
本人毕业十年,现单位上班。因单位的信息化一直普及不高,所以上传下达主要依靠微信。鉴于很多工作需上下级电话沟通,所以电话号码查找一直都通过纸质查找,我便利用业余时间,通过了解小程序开发流程,云开发非常符合我(pin'qiong'diao'si)的要求,于是开发了《通讯云》小程序。
二、小程序功能介绍:
《通讯云》主要以一人创建,多人使用及分享的目标进行设计的。功能如下:
为了满足不同场景,通讯录的权限分为认证访问(只能与通讯录内容人员匹配成功才能使用)、通讯录访问时效等功能,只为打造一款精良的线上通讯录。
三、云开发及部分设计思想:
设计核心:免费使用(hao'mababa'yang'mao),为了达到这一目标。我看上了云开发和本地存储的功能。在云开发的时候我又基于核心规则,在单个文件内实现所有功能除excel存储功能,我的云开发一共使用了3个文件。
四、开发难点:
1、本地存储的数据与云数据库之间的跟新方案:我使用了通过控制版本号和强制更新的方法实现。
本地数据:![](http://mmbiz.qpic.cn/mmbiz_png/MJ9TdmDlvMRKUORMJEvHF0Y1FEI3IHTu41yr94mDMykRGTCPMvVibSkBVdC1oozxoBRnS6G6Pr2SKCXOb3NuxIA/0?wx_fmt=png)
云数据库(开发环境):![](http://mmbiz.qpic.cn/mmbiz_png/MJ9TdmDlvMRKUORMJEvHF0Y1FEI3IHTu0dr9uWEXOtnAYGcrAonkCKpupl0DGKeNXhjU2fWCqckS8xyjZ6V2ww/0?wx_fmt=png)
2、execl表的导入导出方案:为了省资源,我完全做到小程序端分析execl表,然后再上传,网上给出的解法都是上传execl表后通过Node-xlsx解析。使用前端分析减少使用了云数据库的资源。(想了解详情可以直接通过小程序联系我)
五、总结
微信针对云开发提供了很多好的开发方式,本地调试是最实用的。运用Nodejs框架,只需几处修改就可以切换生产和开发两个环境。
服务器端:
cloud.init({ //env: 'shumyun-phonecloud', env: 'phonecloud-test', })
小程序端:
wx.cloud.init({ env: 'phonecloud-test', //env: 'shumyun-phonecloud', traceUser: true, }) this.globalData.XLSXTempleteFileID = 'cloud://phonecloud-test.7068-phonecloud-test-1259594610/XLSXTemplates/template.xls' //this.globalData.XLSXTempleteFileID = 'cloud://shumyun-phonecloud.7368-shumyun-phonecloud-1259594610/XLSXTemplates/template.xls'
六、数据库设计表等附件
一直用的是PHP开发、懵懵懂懂恍恍惚惚的跑进云开发的坑里,然后就做了一个简单不能再简单的小程序-“作诗”,灵感来源-【主持人大赛】,接口找了半天,最后用的是-百度智能创作平台(由于目前接口升级还有2-3天才能访问,比较坑)
基本操作就是,在数据库中建一个config集合,把百度云的app_key和secret_key填上即可。
这是我的第一个云开发小程序,还是懵懵懂懂~~赚点流量费容易么。。有靠流量主过日子的可以探讨探讨~~
我就是想要个相册
呵呵,我来分享一下我的云开发小程序智能垃圾分类。
不需要域名,不需要服务器。而且还有免费容量,一般简单的小程序就够了。这对于我们这种穷Iter 太好了。
2.我以前使用golang 做后台,虽然也挺好,但是对于小项目还是云开发迅速点.
3.我这个是开源的https://github.com/qi19901212/Garbage
4.我现在大约库里存有6k 多条垃圾分类的数据运行还顺畅的。
自己做了一个搜索电脑软件的小程序。
用了云开发的数据库、存储能力。
利用了python爬虫将许多软件名称和软件链接绘制成csv表格;
用了云调用的增和查接口;
用了存储的下载地址功能。
总结一下:小程序没有那么高大上。
在这提个云开发的需求:删除的数据要是有一个垃圾桶的概念会不会体验更好一点。有时候强迫症手动删除一些垃圾数据,后面发现删除错了。数据挺重要的,想恢复一下。例如删除的数据有个七天的缓冲期,就能恢复指定数据,如何?数据库回档是整个集合的并不能好好的玩耍。
我个人使用小程序云开发的项目有两个:
1,问卷调查I投票。(拿这个去宣传分享吧,放了些广告了,哈哈哈)
有啥新功能新特性都会想办法塞进“问卷调查I投票”这个小程序。例如:
1,数据实时更新。
2,订阅消息。
3,定时触发器。
4,客服关键字自动回复(开发版做了)
5、生成带参数二维码
6、..............................
从来没有收到礼物,是个礼物就行。(加粗加红了,应该能一眼就看到了)