模型与 Lucid 中其他模型的 ID 数组的关系 Mongo

Relationship of a model with an array of Ids of other model in Lucid Mongo

现在,我有一个教室的 mongoldb 数据库,并使用 AdonisJS 和 Lucid Mongo 创建了一个 API。在教室里有一个名为 students 的集合和另一个名为 classes 的集合。两个集合的结构如下。

students = {
   _id: ObjectID
   name: string
   age: number
}

classes = {
   _id: ObjectID
   name: string
   professorId: ObjectID
   students: ObjectID[]
}

如您所见,在 classes 集合中,我有一个包含学生的数组。我如何使用 Lucid Mongo 或简单的 mongodb

来调用这种关系

好吧,如果您处于模式设计的早期,您应该将相关的 table 设计展平成一个集合,其中 class 是学生集合中的一个文档:

 students = {
   _id: ObjectID
   name: string
   age: number
   class = {
   _id: ObjectID
   name: string
   professorId: ObjectID
}}

在您现有的相关架构中;必须在 class 集合上使用聚合管道并 $unwind Class - Student 数组按学生放入单个学生文档中,然后 $lookup Student 集合。

好吧,如果最初的问题是如何 'call the relationship' 并且您有这 2 个集合 - 方法是在相关字段(名称)上使用 $lookup。

从那里去哪里取决于 data/fields 您希望在最终查询结果中显示的具体内容。

一个学生在多个 classes 中不会改变 $lookup 需求。它将影响您最终查询的设计方式,这取决于您寻求的具体结果,即单个学生、所有学生、class 计数、class 姓名等...

如果您处于架构设计的早期阶段并且可以从相关更改为平面 - 按照我的第一个 post - 这在 NoSQL 方法中更有效。例如,对学生进行简单的 $match 会使 classes 的显示非常简单。它也可以在您现在拥有的相关集合中完成,但涉及更多。

不幸的是,Lucid Mongo 不支持您的聚合管道,但我使用 Classes 模型中的 referMany 方法解决了这个问题,如下所示:

 students() {
     return this.referMany('App/Models/Student','_id','studentsId)
 }