Связь модели с массивом идентификаторов другой модели в Lucid Mongo - PullRequest
0 голосов
/ 01 марта 2020

Сейчас у меня есть база данных mongoldb для класса и я создаю API, используя Adonis JS и Lucid Mon go. В классе есть коллекция под названием students, а другая - classes. Структура обеих коллекций следующая.

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

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

Как видите, в коллекции classes у меня есть массив со студентами. Как я могу назвать это отношение, используя Lucid Mon go или просто mongodb

Ответы [ 3 ]

1 голос
/ 02 марта 2020

К сожалению, Lucid Mon go не поддерживает ваш агрегатный конвейер, но я решаю эту проблему, используя метод referMany в модели Classes следующим образом:

 students() {
     return this.referMany('App/Models/Student','_id','studentsId)
 }
0 голосов
/ 02 марта 2020

хорошо, если исходный вопрос состоит в том, как «вызвать отношения», и у вас есть эти 2 коллекции - метод заключается в использовании $ lookup для соответствующего поля (имя).

, где вы go из зависит от того, какие данные / поля вы будете sh отображать в окончательных результатах запроса.

то, что ученик учится в нескольких классах, не меняет потребности в поиске в $. Это повлияет на то, как будет разработан ваш окончательный запрос, и это зависит от конкретных результатов, которые вы ищете, например, одного студента, всех учащихся, количества классов, названий классов и т. Д. c ...

, если вы на ранних этапах разработки схемы и может меняться от родственного к плоскому - согласно моему первому посту - это более эффективно в подходе No SQL. например, простое $ match для ученика сделало бы отображение их классов очень простым. Это также можно сделать в связанных коллекциях, которые у вас сейчас есть, но это немного сложнее.

0 голосов
/ 01 марта 2020

хорошо, если вы находитесь на ранней стадии разработки схемы, вы должны свести из связанной схемы таблицы в одну коллекцию, где класс является делом c в коллекции учащихся:

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

В связанной схеме, которая у вас есть сейчас; нужно использовать агрегатный конвейер в коллекции классов и $ раскрутить массив Class - Student в отдельные документы для студентов по ученикам, а затем $ lookup the Student collection.

...