当前位置: 首页 > Web前端 > JavaScript

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

时间:2023-03-26 20:37:50 JavaScript

项目技术栈微信原生小程序+云开发。为什么选择微信原生小程序进行开发?因为它可以直接应用它的云开发能力。这里我主要使用云开发能力中的小程序端SDK。说白了就是用javascript直接操作数据库即可。本文前言基于云答题小程序v2.0的源地址,以及教大家搭建答题小程序v1.0的系列文章目录。在11月的最后一天及时完成]本文底部。还记得我在问答活动小程序v1.0时是如何使用云开发实现查询题库功能的吗?不记得可以重温这篇文章【手把手教你搭建一个消防安全问答题程序-使用云开发实现查询题库功能】,这是顺序提问的方式。现在v2.0版本的答题活动小程序需要更换为随机出题方式。因此,我利用云开发的聚合能力,实现了题库随机出题的功能。先查文档,通读文档,我们先对实现原理有个大致的了解。简单的有针对性的看几个相关的概念。暂时看不懂没关系,后面可以专注于实战部分。一、数据库聚合能力描述聚合是一种数据批量操作。有了聚合能力,很多没有聚合能力就无法实现或者只能低效实现的场景可以轻松解决。此类场景的示例包括:分组查询、随机选择、去重...2.DatabaseAggregateAggregate,一个数据库集合的聚合操作实例。3.涉及的方法(1)Collection.aggregate():Aggregate发起聚合操作。聚合流水线阶段定义完成后,需要调用end方法标记定义结束,真正发起聚合操作。(2)Aggregate.match(object:Object):Aggregate聚合阶段。根据条件过滤文档,将符合条件的文档传递到下一个流水线阶段。(3)Aggregate.sample(size:number):Aggregate聚合阶段。从文档中随机选取指定数量的记录。(4)Aggregate.end():Promise标志聚合操作定义完成,并发起实际的聚合操作。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)letdata=res.list||[];//从逻辑层传输数据是发送到视图层,通俗地说就是更新数据到页面显示this.setData({questionList:data});})}并在控制台中查看效果[CloudDatabase][activityQuestion]查询成功,返回了从题库中随机抽取的20道题目数据。在这个总结中,我们可以看到云开发能力确实极大地提升了开发效率。其实不光是在答题小程序中,会有这样或那样的需求,需要在题库中随机生成题目。如上所述,如果进行抽奖,则需要选择一名或多名幸运用户。实践证明,样品是最好的选择之一。