乐趣区

关于前端:反电信网络诈骗普法宣传答题实现联表查询学生的平均成绩

国内经济与贸易学院组织反电信网络欺骗线上答题流动,发展集中普法宣传教育流动,从而构筑立体化反欺骗防线。

通过此次较量,疏导宽广同学时刻牢记反欺骗内容,进步师生的自我财产平安防备意识,增强自我网络爱护的思维理念,守护好大家的“钱袋子”。

先看一下如何查问,将这两个表连起来的数据是 class 表中的 id 和 student 表中的 class_id。所以咱们应该先查出徐老师所在班级的 id,是 2,而后再查问 student 表中 class_id 为 2 的学生,张二和李二,计算这两个学生的均匀问题。应用 lookup 函数实现联表查问:lookup({
from: < 要连贯的汇合名 >,
localField: < 输出记录的要进行相等匹配的字段 >,
foreignField: < 被连贯汇合的要进行相等匹配的字段 >,
as: < 输入的数组字段名 >
})间接返回学生问题平均值如果想要在被连贯的表格 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 这些字段同一级。project 外面将_id 前面设为 0,将咱们想要显示的元素前面设为 1,就能管制最初输入的字段。

退出移动版