как использовать мангусты для обработки отношения один ко многим - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть две схемы, как показано ниже

Student.js

module.exports = (mongoose) => {
const Schema = mongoose.Schema;
const studentsSchema = new Schema({
    name :  {
        type : String,
        required : true
    },
    roll : {
        type : Number,
        default : null
    },
    class : {
        type : String,
        default : null
    }
});

return mongoose.model('students', studentsSchema);
};

Subject.js

module.exports = (mongoose) => {
 const Schema = mongoose.Schema;
 const subjectSchema = new Schema({
    title :  {
        type : String,
        required : true
    },
    author : {
        type : String,
        default : null
    },
    price : {
        type : Number,
        default : null
    },
    studentId : {
        type : String
    }
});

return mongoose.model('subjects', subjectSchema);
};

Мне нужно выполнить поиск по модели студента, чтобы получить массив студентов. И каждый ученик будет содержать множество своих предметов. Каждый индексный массив предметов будет содержать полный объект предметов. просто так.

[
  {
    name : "student 1",
    roll : 1234,
    class : "TEN",
    subjects : [
      {
        title : 'English',
        author : 'peter',
        price : 210
      },
      {
        title : 'Math',
        author : 'Nelson',
        price : 222
      }
    ]
  }
]

Как мне добиться этого с помощью ссылок?

1 Ответ

0 голосов
/ 19 ноября 2018

Вы можете использовать ref функциональность и заполнять.

Это будет выглядеть так:

 const subjectSchema = new Schema({
    title :  {
        type : String,
        required : true
    },
    author : {
        type : String,
        default : null
    },
    price : {
        type : Number,
        default : null
    }
    // studentId : {
    //     type : String
    // }
    // ^ You don't need to save the student id, since the ids of the subject
    //   will be saved in your Student schema
});

mongoose.model('subjects', subjectSchema);

const studentsSchema = new Schema({
    name :  {
        type : String,
        required : true
    },
    roll : {
        type : Number,
        default : null
    },
    class : {
        type : String,
        default : null
    },
    subjects: [{ type: Schema.Types.ObjectId, ref: 'subjects' }]
    // ^ Add the reference to subjects
});

mongoose.model('students', studentsSchema);

И тогда вы можете запросить

mongoose.model( "students" ).find().populate( "subjects" ).exec( ( results, error ) => {
   console.log( results ); // { ... subjects: [ ... ] }
} );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...