项目技术栈

微信原生小程序+云开发。为什么选择微信原生小程序进行开发呢?因为能够直接应用它的云开发能力吖。

我这里主要使用了云开发能力中的小程序端SDK,说白了就是在javascript中就能直接操作数据库。

本篇前言

基于云开发的答题活动小程序v2.0的源码地址,以及手把手教你搭建答题活动小程序v1.0系列文章目录,均在【基于云开发的答题活动小程序v2.0,终于赶在11月最后一天完成了
】这篇文章的底部。

还记得我在答题活动小程序v1.0的时候,是怎么实现用云开发实现查询题库功能吗?不记得的话,可以重温一下这篇文章【手把手教你搭建消防安全答题小程序-用云开发实现查询题库功能】,这种是顺序出题的方式。

现在答题活动小程序v2.0版本,要换成随机出题方式,所以,我使用了云开发的聚合能力实现从题库中随机出题功能。

先查文档

通读文档,我们先对实现原理有个大概了解。有针对性的简单地看看几个相关的概念,暂时看不懂也没关系,可以只关注后面的实战部分。

1、数据库聚合能力说明

聚合是一种数据批处理的操作。有了聚合能力,可以方便的解决很多没有聚合能力时无法实现或只能低效实现的场景,这类场景的例子有:分组查询、随机选取、去重......

2、数据库Aggregate

Aggregate,数据库集合的聚合操作实例。

3、涉及到的方法

(1)Collection.aggregate(): Aggregate

发起聚合操作,定义完聚合流水线阶段之后需调用 end 方法标志结束定义并实际发起聚合操作。

(2)Aggregate.match(object: Object): Aggregate

聚合阶段。根据条件过滤文档,并且把符合条件的文档传递给下一个流水线阶段。

(3)Aggregate.sample(size: number): Aggregate

聚合阶段。随机从文档中选取指定数量的记录。

(4)Aggregate.end(): Promise<Object>

标志聚合操作定义完成,发起实际聚合操作。

4、特别关注sample

以上那些方法是我这次涉及到的几个API,这里特别关注一下.sample()这个API。

Aggregate.sample(size: number): Aggregate

聚合阶段。随机从文档中选取指定数量的记录。

API 说明

sample 的形式如下:

sample({size: <正整数>
})

请注意:size 是正整数,否则会出错。

示例

假设文档 users 有以下记录:

{ "name": "a" }
{ "name": "b" }

随机选取

如果现在进行抽奖活动,需要选出一名幸运用户。那么 sample 的调用方式如下:

db.collection('users').aggregate().sample({size: 1}).end()

返回了随机选中的一个用户对应的记录,结果如下:

{ "_id": "696529e4-7e82-4e7f-812e-5144714edff6", "name": "b" }

来实战吧

这段代码实现了随机出题的功能,直接上代码,稍微简单解读一下。

// 获取题库-函数定义getQuestionList() {// 数据库集合的聚合操作实例activityQuestion.aggregate().match({       //类似于where,对记录进行筛选true: _.exists(true)}).sample({size: 20}).end().then(res => {// 在控制台打印数据console.log(res.list)let data = res.list || [];// 将数据从逻辑层发送到视图层,通俗的说,也就是更新数据到页面展示this.setData({questionList:data});})}

再看效果

可以在控制台中看到[云数据库] [activityQuestion] 查询成功了,返回了20条从题库中随机选取的题目数据。

本篇小结

可以看到,云开发能力,真的极大地提升了开发效率。其实不仅仅是在答题小程序中,会存在这样或那样的需求,需要在题库中随机出题。还有上面提到的,如果进行抽奖活动,需要选出一名或多名幸运用户。实践证明,那么 sample ,就是最佳选择之一了。

基于云开发的答题活动小程序v2.0-用云开发的聚合能力实现从题库中随机出题功能相关推荐

  1. 基于云开发的答题活动小程序v2.0-答题记录页

    项目技术栈 微信原生小程序+云开发.我这里主要使用了云开发能力中的小程序端SDK,说白了就是在javascript中就能直接操作数据库. 本篇前言 基于云开发的答题活动小程序v2.0的源码地址,以及手 ...

  2. 基于云开发的答题活动小程序v2.0-结合具体场景谈谈路由传参以及组件化思想

    项目技术栈 微信原生小程序+云开发.我这里主要使用了云开发能力中的小程序端SDK,说白了就是在javascript中就能直接操作数据库. 本篇前言 基于云开发的答题活动小程序v2.0的源码地址,以及手 ...

  3. 基于云开发的答题活动小程序v2.0-完整项目分享(附源码)

    简介 答题活动小程序v2.0,是一个微信小程序答题软件,它基于微信原生小程序+云开发实现. 它使用了最新的前端技术栈,具有原生APP体验服务的小程序框架,小程序视图层描述语言 WXML 和 WXSS, ...

  4. 基于云开发的答题活动小程序v1.0,开开开源啦

    基于云开发的微信答题活动小程序v1.0,开开开源啦!!!这个答题小程序,技术栈是基于云开发的微信原生小程序. 搭建教程系列文章 11月是全国"119"消防宣传月,不少企事业单位会举 ...

  5. 基于云开发的微信答题活动小程序v1.0搭建部署帮助文档

    11月是全国"119"消防宣传月,不少企事业单位都会举办消防安全知识竞答活动,因此我基于云开发搭建了消防安全知识答题活动小程序. 接着,还写完了初阶的手把手教你搭建答题活动小程序系 ...

  6. 答题活动小程序v3.0

    答题活动小程序v3.0 简介 答题活动小程序v3.0,基于云开发的微信答题小程序,软件架构是微信原生小程序+云开发. 主要包含六大功能模块页面,首页.答题页.结果页.活动规则页.答题记录页.排行榜页. ...

  7. 答题活动小程序v1.0

    本文背景 手里运营一个答题活动助手小程序,这个小程序目前版本已经到了v1.81,产品推出也快半年了,功能上没有已知问题,前两天趁空闲,做了下优化了,今天做个总结,对近期的工作收尾,小程序刚刚已提交审核 ...

  8. 开发知识竞赛答题活动小程序过程中使用到的实用工具库介绍

    前言 我在做知识竞赛答题活动小程序经常需要处理一些比较基础的事情,比如时间.数组.数字.对象.字符串等处理,自己造轮子的话成本会比较高.这时候我们可以去找一些别人已经写好的开源模块或者开源库,我们直接 ...

  9. Java web对试卷进行单选多选答题进行打分_知识竞赛答题活动小程序

    想扫码体验的同学,可以直接移步这篇文章了解下 小肥羊:如何搭建一套知识竞赛答题活动小程序​zhuanlan.zhihu.com 前言:这几天在公司闲闲无事,恰好团队有通过在线考试的需求,于是自发撸了一 ...

最新文章

  1. linux 软链接_面试 | Linux 下软链接和硬链接的区别
  2. hdu 5312 数学
  3. Oracle 存储过程+JOB初学
  4. NUC1399 Sum It Up【DFS】
  5. Srs之HttpApi内部调用流程
  6. jQuery之筛选函数
  7. 打印服务自动停止的解决方法
  8. 基于深度学习和自闭症脑成像数据库(ABIDE)识别自闭症谱系障碍
  9. C/C++项目:魂斗罗游戏
  10. ActiveMQ 无法访问管理页面
  11. MathType怎么编辑商标标志
  12. [0]SWM181-从零开发华芯微特MCU
  13. 龙芯Fedora21平台制作feodra21-loongson-app docker镜像
  14. 每年都有几个研究生,被“爸爸”逼得跳楼
  15. 串口中断处理 m=SBUF; SBUF=m;自收发
  16. mac mi 芯片 安装ps
  17. 【54期】Java序列化三连问,是什么?为什么需要?如何实现?
  18. 再见 Excel,你好 Python Spreadsheets! ⛵
  19. Mac版Ps、AE、PR不能突然使用?
  20. 【网络游戏§绿色DOTA2魔笛V1.001 官方最新版§DOTA游戏辅助工具§】

热门文章

  1. html5中三级下拉菜单实现案例
  2. 转 中兴H608b破解 中兴H608b路由 中兴H608b升级 zxv10 H608b破解 zxv10 H608b路由 zxv10 H608b升级
  3. Just for Fun - 3第三章(转)
  4. 小米10Pro手机双击android,被迫性价比?小米10pro入手体验
  5. 专访优维科技CTO黎明:探寻当下的IT运维之道
  6. MAPI的一些问题解答
  7. 半角和全角的区别 java_输入法全角和半角的区别是什么?【详解】
  8. 让AI画画 | 大神复现OpenAI的Dall-E
  9. python线性回归训练及可视化(披萨尺寸与价格)
  10. python 类实例化后作为参数_python--类的实例化