问题描述
使用 Mongoose 的 Express 服务器在其路由之一中从数据库返回以下 JSON:
{
"gradeLevel": 12,"classes": [
{
"className": "A","students": [
"student1","student2","student3"
]
},{
"className": "B","students": [
"student4","student5","student6"
]
},{
"className": "C","students": [
"student7","student8","student9"
]
}
]
}
在客户端中,例如,我希望能够有效地检查学生是否在父文档中的任何 类子文档中。以下是我设想的解决方案,但我不确定哪种是最佳实践:
- 当学生被推送到班级子文档时,也将学生推送到家长的
students
字段。 - 在模型的 toJSON 转换中添加一个新字段以编译所有学生。
- 在客户端使用 vanilla Javascript 提取所有学生
解决方法
我也遇到了这个问题。但是要解决这个问题,您需要一个名为 allStudents
的单独集合,例如它的架构如下
{ nameOfStudent: 'String' className: 'String' }
然后将其与子文档相应地聚合。因此,无论您将新学生推入 allStudents
并提到 className
,它都会被推入相应 className 的 Students 子文档。
使用点符号查询,例如
.find({"classes.students":"student8"})
将检查 students
数组中每个对象的 classes
字段,返回包含任何班级中特定学生的文档。
感谢您提供的答案。只是分享另一个使用 vanilla Javascript 的解决方案,可能对类似情况的人有用:
checkStudent = (batch,student) => {
let result = null
const inClass = (cls) => {
if (cls.students.includes(student)) {
result = cls
return true
}
return false
}
batch.classes.some(inClass)
return result
}