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

反电信网络诈骗宣传答疑可结合查询学生平均成绩

时间:2023-03-28 10:41:59 HTML

国际经济与贸易学院组织开展反电信网络诈骗在线答疑活动,集中开展普法教育活动,构筑立体反欺诈防线。通过本次比赛,引导同学们时刻牢记防诈骗内容,提高师生财产安全自我保护意识,强化自保网络观念,保护好大家的“钱”包”。我们先看看如何查询。连接这两个表的数据是class表中的id和student表中的class_id。所以我们首先要找出徐老师所在班级的id为2,然后查询学生表中class_id为2的学生张二和李二,计算这两个学生的平均成绩。使用lookup函数实现联表查询:lookup({from:<待连接的集合名>,localField:<输入记录中待匹配的字段>,foreignField:<输入记录中待匹配的字段待连接集合>,如:<输出数组字段名>})直接返回学生平均成绩。如果要对连接表student进行聚合操作,使用pipeline方式。但是pipeline不能与localField和foreignField共享,所以我们先删除localField和foreignField,然后取pipeline中学生成绩(score)的平均值。lookup({from:'student',pipeline:$.pipeline().group({_id:null,score:$.avg('$score')}).done(),as:'stu'}).match({teacher:"徐老师"}).end()现在打印数据是这样的:{"list":[{"_id":"5e847ab25eb9428600a512352fa6c7c4","id":2,"teacher":"徐老师","cname":"二班","stu":[{"_id":null,"score":90}]}]}但是现在输出的数据有点复杂。如果只想显示teacher和score这两个值,我们会进行如下操作。只显示teacher和score.lookup({from:'student',pipeline:$.pipeline().group({_id:null,score:$.avg('$score')})这两个值。done(),as:'stu'}).match({teacher:"许老师"}).replaceRoot({newRoot:$.mergeObjects([$.arrayElemAt(['$stu',0]),'$$ROOT'])}).project({_id:0,teacher:1,score:1}).end()现在打印出这样的数据:{"list":[{"score":90,"teacher":"徐老师"}]}这里是文档中的相关解释:replaceRoot({newRoot:})是一种固定的写法,将已有的字段输出为一个新的节点。我们通常用它来代替二级数组成为一级数组。mergeObjects是累加器运算符,$.arrayElemAt(['$stu',0]),'$$ROOT']是stu数组的第一个元素,即[{"_id":null,"score":90}]合并到数组的根节点,即与teacher和cname字段处于同一层级。在项目中,将_id设置为0,将我们要显示的元素设置为1,来控制最终的输出字段。