繁体   English   中英

Mongoose:如何将子文档中的数组提取到父文档中的单个数组

[英]Mongoose: How to extract arrays in subdocuments to a single array in the parent document

使用 Mongoose 的 Express 服务器在其路由之一中从数据库返回以下 JSON:

{
  "gradeLevel": 12,
  "classes": [
    {
      "className": "A",
      "students": [
        "student1", "student2","student3"
      ]
    },
    {
      "className": "B",
      "students": [
        "student4", "student5","student6"
      ]
    },
    {
      "className": "C",
      "students": [
        "student7", "student8","student9"
      ]
    }
  ]
}

在客户端,我希望能够例如有效地检查学生是否在父文档中的任何类子文档中。 以下是我构想的解决方案,但不确定哪个是最佳实践:

  1. 当学生被推送到班级子文档时,也将学生推送到父母的students字段。
  2. 在模型的 toJSON 转换中添加一个新字段以编译所有学生。
  3. 在客户端使用 vanilla Javascript 提取所有学生

我也遇到了这个问题。 但是要解决这个问题,您需要一个名为allStudents的单独集合,例如它的架构如下{ nameOfStudent: 'String' className: 'String' }

然后将其与子文档相应地聚合。 因此,无论您将新学生推入allStudents并提到className ,它将被推入相应 className 的allStudents子文档。

用点符号查询,比如

.find({"classes.students":"student8"})

将检查classes数组中每个对象的students字段,返回包含任何班级中特定学生的文档。

感谢您提供的答案。 只是使用 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
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM