Как удалить содержимое списка, а не только список? Если x в y, удалите y также, когда x удален - PullRequest
1 голос
/ 24 апреля 2019

У меня две коллекции,

  • Кабинеты
  • Студенты

Вот их схема

**CLASSROOM SCHEMA**

const mongoose = require('mongoose');


const classroomSchema = new mongoose.Schema({
  classroomname:  {
    type: String
  },
  createdAt: { type: Date, default: Date.now },
  author: {
    id: {
        type: mongoose.Schema.Types.ObjectId, 
        ref: "User",

    },
   },
  students: {
    id : {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Student"
    }
  }

});

const Classroom = mongoose.model('Classroom', classroomSchema);

module.exports = Classroom;

и ..

**STUDENT SCHEMA**

const mongoose = require('mongoose');


const studentSchema = new mongoose.Schema({
    fullName: {
        type: String
    },
    author: {
    id: {
        type: mongoose.Schema.Types.ObjectId, 
        ref: "User",

    },
   }, 
    classroom: {
                name: {
                        type: String
                        },
                id: {
                        type: mongoose.Schema.Types.ObjectId, 
                        ref: "classroom",
                    }
                },

});

const Student = mongoose.model('Student', studentSchema);

module.exports = Student;

Вот как студенты выглядят enter image description here

  • где author.id - это user.id, который создал студента после регистрации в.

У меня есть следующий код для успешного удаления студента

router.get('/delete/:id',passportConfig.isAuthenticated,(req, res) => {


    Student.findByIdAndRemove(req.params.id, (err, docs) => {
            if (!err) {
                res.redirect('/');
            }
            else {console.log('Error in classroom deletion:' +err);}

        });

    });

.. и очень похожий код для удаления Классной комнаты. Мой вопрос Как, когда я удаляю Классную комнату, чтобы удалить также всех учеников, принадлежащих к этой классной комнате?

Вот моя логика

find classroom id
find student.classroom.id
if student.classroom.id == classroom.id
Classroom, Student findbyid and remove

Спасибо!

1 Ответ

1 голос
/ 24 апреля 2019

Ниже код поможет:

req.params.id должен быть идентификатором класса.

router.get('/delete/:id',passportConfig.isAuthenticated,(req, res) => {
  // To Delete Classroom by id 
  Classroom.remove({_id : mongoose.Schema.Types.ObjectId(req.params.id)}, (errClass, classroomRes) => { 
    if (!errClass) {
    console.log('Classroom Removed :',classroomRes);
    // delete stud which has classroom Id.
      Student.remove({'classroom.id' : mongoose.Schema.Types.ObjectId(req.params.id)}, (errStud, studentRes) => { 
        if(!errStud){
            console.log('studentRes Removed :',studentRes);
        }else{
            console.log('Error in Student deletion:',errStud);
        }
        return res.redirect('/');
      });

    }else{
       console.log('Error in Classroom deletion:',errClass);
       return res.redirect('/');
    }
  })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...