模型与 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)
}
现在,我有一个教室的 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)
}