小程序·云开发的数据库,是一个既可在前端操作、也能在云函数中读写的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、产品笔记丨发现优秀产品细节
利用数据库高级操作更新文章。
这款小程序因为内容全是自己创作,所以在上传作品的时候非常“偷懒”的使用了云开发的高级操作直接上传作品,这样一来,省去了后台和做不必要的界面,非常方便,数据操作非常方便。
新增操作:
效果如下:
基于云开发的数据库能力+云开发的静态托管+云函数+自定义登录,可以做什么呢?
可以做一个管理云开发数据库的管理后台,不仅可以管理数据库字段,还可以管理图片、文件、富文本等类型。
大概长这样
那么如何开发呢?答案是不用开发,在云开发里面一键就可以部署一个
这个系统有什么特点呢?
云开发 CMS 内容管理系统是云开发 CloudBase 提供的一个扩展程序,可以在云开发控制台一键安装在自己的云开发环境中,让开发人员和内容运营者随时随地管理小程序 / Web 等多端产生的内容数据。无须编写代码即可使用,还提供了 PC / 移动端浏览器的访问支持,支持文本、富文本、Markdown、图片、文件、关联类型等多种类型的可视化编辑。
推荐使用场景
1. 适用于需要为小程序应用增加一个运营管理后台的业务
CMS 扩展非常适合小程序的商品管理、文章编辑和发布、运营活动配置、素材管理等数据和内容管理的场景。使用 CMS 扩展,可以省去手动线上修改数据库数据或者投入人力物力开发管理后台的麻烦,只需要安装之后进行一些简单的配置,就可以随时随地使用 CMS 内容管理系统来管理内容,同时还提供了管理员和运营者的两套身份体系的权限控制。
2. 适用于快速开发内容型的网站应用、小程序应用的场景
CMS 扩展还可以用来配合开发网站应用和小程序应用,提升开发效率。使用 CMS 扩展可以解决内容和数据的管理和生产问题,并且省去一部分后端开发工作,直接可以结合前端应用框架读取云开发数据库数据进行渲染。例如基于 CMS 可以快速开发博客、企业官网等内容型的网站、小程序应用。
官方文档链接
https://cloud.tencent.com/document/product/876/44547
作为一名独立开发者,当看到小程序支持云开发可以不需要自己购买服务器时甚是开心。毕竟因为自己太穷了[苦笑]
作为一名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、本地存储的数据与云数据库之间的跟新方案:我使用了通过控制版本号和强制更新的方法实现。
本地数据:
云数据库(开发环境):
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表格;
用了云调用的增和查接口;
用了存储的下载地址功能。
总结一下:小程序没有那么高大上。