- 【笔记】云开发中的聚合aggregate和数据查询get简单对比
背景 在我开发在线答题小程序的过程中,会经常使用到聚合aggregate和数据查询get,比如从题库抽题、付费解锁、排行榜等。 聚合aggregate和数据查询get时不同的两套体系,聚合更偏向于数据的统计分析。 由于聚合和数据查询都能对数据库进行查询,而且两个的很多方法都特别类似,所以我刚开始的时候会混淆,甚至错误的混用,比如会在aggregate()加where条件、get请求,这里为了让自己更好理解,特整理一下两个的对比,我在写数据库查询和聚合时都会先写类似以下的模板。 普通数据查询 const db = wx.cloud.database() //获取数据库的引用 const _ = db.command //获取数据库查询及更新指令 db.collection("question") //获取集合china的引用 .where({ //查询的条件指令where create_time: _.gt(1598580712652) //查询筛选条件,gt表示字段需大于指定值。 }) .field({ //显示哪些字段 _id:false, //默认显示_id,这个隐藏 subject: true, answer: true, options:true }) .orderBy('create_time', 'desc') //排序方式,降序排列 .skip(0) //跳过多少个记录(常用于分页),0表示这里不跳过 .limit(10) //限制显示多少条记录,这里为10 .get() //获取根据查询条件筛选后的集合数据 .then(res => { console.log(res.data) }) .catch(err => { console.error(err) }) 聚合查询 const db = wx.cloud.database() const _ = db.command const $ = db.command.aggregate db.collection('china').aggregate() .match({ //类似于where,对记录进行筛选 price: $.gt(3000) }) .project({ //类似于field }) .sort({ //类似于orderBy age: -1, score: -1 }) .skip(5) //类似于skip .limit(2) //类似于limit .end() .then(res => console.log(res)) .catch(err => console.error(err)) 总结 match是根据条件过滤文档,进行的是查询匹配,语法和where比较类似,在写聚合时,应尽可能的把match放在流水线的前面。match内可以写db.command查询操作符 [代码]_[代码] 和聚合操作符db.command.aggregate [代码]$[代码],但是除了match阶段,在其他聚合阶段中传入的对象可使用的操作符都是聚合操作符;project 把指定的字段传递给下一个流水线,指定的字段可以是某个已经存在的字段,也可以是计算出来的新字段,它和field不同的是可以新增一些不存在的字段(只是显示用,也没写进数据库);sort 根据指定的字段,对输入的文档进行排序。<排序规则>可以是以下取值:1 代表升序排列(从小到大);-1 代表降序排列(从大到小);功能和orderBy类似;小程序端 limit 默认 20,也就是如果你使用聚合查询,你查询到的数据都会默认显示20条数据,但是你可以设置更多,而普通查询是不能超过20条的。
2020-08-28 - 推流直播操作指引
一、准备工作 1、获取推流地址 在小程序MP后台(https://mp.weixin.qq.com)创建推流直播计划,获取推流地址 1)创建直播计划 在MP先创建推流直播计划 [图片] 2)选择推流直播类型 选择直播类型为设备推流直播(推流类型的直播需要直播组件1.0.3及以上版本才支持) [图片] 3)主播进行扫码验证 未做实名认证的主播开播要进行扫码验证 [图片] 4)获取推流地址 创建成功后,在成功弹窗内可拿取推流地址,也可以后面在控制台获取推流地址 a:创建成功后在弹窗上,直接获取推流地址 [图片] b:也可后续在控制台获取推流地址 [图片] 2、下载使用推流第三方软件 市面上的第三方推流软件都可用,小程序直播负责提供推流的地址和控制直播间的能力。 ——第三方推流软件例如PC端推流可用【OBS】软件,手机端可用【芯象直播软件】;第三方推流软件的用法可自行百度软件使用方法;下面简单举例说明小程序直播与OBS软件配合发起推流直播的流程。 3、举例说明OBS软件配置使用 1)下载安装第三方推流软件 搜索引擎搜索OBS软件,在官网https://obsproject.com/下载并安装在电脑上 [图片] 2)【推流】推流地址配置 打开OBS进行推流地址配置 [图片] 在设置中输入刚在第一步在小程序MP端拿到的推流地址 例如:在MP端复制到的推流地址如下: rtmp://wxalivepush.weixin.qq.com/live/wx40f8626ddf43d361_2796?txSecret=4b886b8127b82cde297c7ff6d76915a4&txTime=5efba7d0 服务器部分填: rtmp://wxalivepush.weixin.qq.com/live/ 串流密钥:复制推流地址上 live/ 后面的内容 wx40f8626ddf43d361_2796?txSecret=4b886b8127b82cde297c7ff6d76915a4&txTime=5efba7d0 [图片] 3)其他参数配置 【参数配置表】 研究得到两种常用分辨率下的推流参数的推荐值(也可根据需要配置其他比例): 720P:1800Kbps-推荐 1080P:3000Kbps-清晰度更佳(但对网络要求高,如果网络条件达不到 100兆以上 ,则会出现卡顿的情况,如果直播过程出现明显卡端可及时调整到720P的配置) [图片] 下面按720P举例如何配置 a、【视频】配置 分辨率:这个设置是决定最后流的画面尺寸(横竖屏等),OBS该项配置可以选择,也可以自定义填写。观众端会根据流的画面比例自动适配横竖屏 720P(横屏:1280x720,竖屏:720X1280) [图片] b、【输出】配置 视频比特率:1800Kbps左右(720P类型)。如果是分辨率配置是1080P类型(1080*1920),建议视频比特率设置为3000Kbps编码器:x264音频比特率:160[图片] c、【音频】配置 采样率:44.1KHz声道:立体声其他配置项:按实际需要进行配置[图片] d、采集来源配置 如果要用PC电脑做为直播录制设备,可以在【来源】处选择 视频捕捉设备音频捕捉设备4)设置好可以调整整个窗口的占比,确认好效果后,先OBS点击推流 [图片] 直播中展示PPT—— 如果同时需要一边录制一边播放PPT,可以在【来源】处选择窗口捕捉设备 窗口捕捉设备[图片] 推横屏流,设置竖屏背景—— 注意:该方式其实是设置了视频流为竖屏流的形式,则观众端无横屏切换按钮 1)横屏流在竖屏的直播间会有未被占满的黑色屏幕,如果想添加背景,可以在OBS上把分辨率设置为竖屏的比例(720*1280或1080*1920) [图片] 2)再在【来源】处选择选择【图像】导入,即可导入需要设置在直播间的背景图 [图片] [图片] 如果要用专业摄像机做为开播设备等更多能力,可以参考第三方推流软件的说明 二、开播 1、回到小程序MP后台 以上准备工作完毕后,可以回到MP小程序后台,直播-控制台 [图片] 2、开播 1)准备开播:进入到控制台,检查推流的状态是否正常,正常的情况下即可开始直播啦,点击【开始直播】则正式开播 a:检查推流是否正常 [图片] b:点击【开始直播】 [图片] 2)观众端表现 分辨率为竖屏流(720*1280或1080*1920),竖屏直播间无横屏切换按钮分辨率为横屏流(1280*720或1920*1080),竖屏直播间有横屏切换按钮显示的比例可以在第三方软件上自由调整 [图片] [图片] [图片] 3)结束直播:优先在控制台点击【结束直播】,再关闭OBS等第三方推流软件 [图片] [图片]
2020-05-22 - 小程序搜索功能,云开发搜索,小程序云开发模糊搜索,同时搜索多个字段
今天来给大家讲讲小程序的搜索功能。我这里后台数据库用的是小程序云开发的云数据库。所以我们搜索的时候就要借助云开发来实现。 一,需求 比如我这里有如下的一些数据 [图片] 我们想实现如下搜索需求 1,搜索标题(title)包含‘小石头’的数据 2,搜索标题(title)或者描述(desc)包含‘小石头’的数据 3,搜索标题(title)描述(desc)都包含‘小石头’的数据 我们知道数据库查询的时候有个where语句,但是where语句是查询某个字段全部包含你输入的内容时才可以,所以单纯用where语句来做搜索的话,结果太单一。所以我们今天就来学习下模糊搜索功能的实现。我们以上面三个需求为例,来一个个讲解。 二,实现原理 我们做模糊搜索的时候,其实就是查询某个字段里是否包含我们的搜索词。而模糊搜索需要借助RegExp,来看看RegExp是什么。 [图片] 官方文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/Database.RegExp.html 再来看看官方示例 [图片] 可能看官方示例会有点糊涂,那么我们接下来就结合具体代码来给大家做下讲解。 三,模糊搜索的代码实现 3-1,模糊搜索单个字段 需求:搜索标题(title)包含‘小石头’的数据 代码如下 [图片] 查询结果如下: [图片] 可以看到我们成功的查询到了标题里包含‘小石头的数据’ 3-2,模糊搜索多个字段(满足一个即可) 需求:搜索标题(title)或者描述(desc)包含‘小石头’的数据 由于我们要查询多个字段,所以我们这里用到了command高级操作符里的or [图片] 代码如下: [图片] 查询结果: [图片] 我们来分析下这两条数据 1,标题和描述都包含‘小石头’,符合 2,虽然标题里没有‘小石头’,但是描述里有,所以也符合。 3,title和desc里都没有‘小石头’,所以不符合。 [图片] 3-3,模糊搜索多个字段(要同时满足) 需求:搜索标题(title)描述(desc)都包含‘小石头’的数据 由于我们要查询多个字段,所以我们这里用到了command高级操作符里的and [图片] 代码如下: [图片] 查询结果: [图片] 我们来分析下这两条数据 1,标题和描述都包含‘小石头’,符合 2,虽然desc里没有‘小石头’,但是title里没有,所以也不符合。 3,title和desc里都没有‘小石头’,所以也不符合。 [图片] 四,源码 为例方便大家使用,我把完整的代码贴到这里,后面大家使用时,直接复制这里的代码,略微改造下就可以了。 [代码] //我这里简单起见就把搜索词写死,正常应该用户输入的 let searchKey = '小石头' let db = wx.cloud.database() let _ = db.command db.collection('news') .where(_.or([ {//标题 title: db.RegExp({ //使用正则查询,实现对搜索的模糊查询 regexp: searchKey, options: 'i', //大小写不区分 }), }, {//描述 desc: db.RegExp({ regexp: searchKey, options: 'i', }), } ])).get() .then(res => { console.log('查询成功', res) }) .catch(res => { console.log('查询失败', res) }) [代码] 到这里就讲完了,我后面会专门在云开发入门的课程里作为实战案例录制视频给到大家的: 《小程序云开发入门视频》
2021-02-08 - 微信小程序三种授权登录的方式
经过一段时间对微信小程序的研发后 总结出以下三种授权登录的方式,我给他们命名为‘一次性授权’‘永久授权’‘不授权’ 1.一次性授权 常规写法,需要获取用户公开信息(头像,昵称等)时,判断调取授权登录接口,但是此方法如果不经处理的话 用户如果拒绝授权或者删除该微信小程序后 需要重新调取并获取用户公开信息(头像,昵称等),此方法用户体验较差,不建议使用; 2.永久授权 在不必要使用用户公开信息(头像,昵称等)时,不调取授权登录接口,只有在必要的时候再去判断调取授权登录接口并把获取到的用户公开信息存入数据库,这样在每次登录时直接先运行指定函数从数据库索取需要的用户公开信息(头像,昵称等)即可,此方法在删除小程序后不用再次去授权登录(因为在用户第一次授权登录时已经把用户的公开信息存入数据库了以后直接向数据库索取即可),建议使用; 3.不授权 不需要授权登录获取用户公开信息(头像,昵称等),使用wx.login获取用户code并传入后台,后台可以通过用户的code值向微信要一个值(具体需要问后台,我只是个小前端,后台的东西不是很懂,只是知道一些逻辑而且也已经成功实现)然后通过这个用code换取的值就可以识别到指定用户,如果需要的话,前端要显示的头像、昵称等这些信息可以使用自定义可编辑的功能,当然,也可以通过<open-data type=“userAvatarUrl”></open-data><open-data type=“userNickName”></open-data>小程序提供的这个组件显示用户的头像及昵称(不过这个组件只有显示功能),用户如果想直接使用自己的头像昵称,也可以自行授权(比如添加个引导按钮什么之类的),建议使用; [图片][图片] 文中使用的微信自带接口、组件及函数: <open-data type=“userAvatarUrl”></open-data> <open-data type=“userNickName”></open-data> wx.login({ success(res){ console.log(res.code) } }) 微信授权登录 以上三种方式可以灵活运用,也可以把需要的结合到一起,并不冲突; 当然,大佬很多,我也只是个小前端而已,第一次发表技术方面的帖子,希望互相学习,互相指导,如有说的不对的地方还望大佬们及时指出!!! 谢谢
2019-04-18