如何解决Mongoose:如何将子文档中的数组提取到父文档中的单个数组
使用 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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。