Я пытаюсь реализовать каскадную вставку для объектов с отношением 1 к многим в Mongoose/MongoDB и изо всех сил пытаюсь ее реализовать. В этом случае университет имеет отношения «один-много» с отделами. Вот мой университетский объект.Как реализовать каскадную вставку с MEAN/MongoDB?
var UniversitySchema = new Schema({
name: {
type: String,
default: '',
trim: true
},
departments: [{
type: Schema.ObjectId,
ref: 'Department'
}]
});
mongoose.model('University', UniversitySchema);
Вот мой отдел схемы:
var DepartmentSchema = new Schema({
name: {
type: String,
default: '',
trim: true
},
University: {
type: Schema.ObjectId,
ref: 'University'
}]
});
mongoose.model('Department', DepartmentSchema);
Вот что я пытался положить внутри пост в схеме. В основном, когда я сохраняю отдел, я пытаюсь вставить идентификатор отдела в университет, чтобы установить отношения одного и того же в обоих направлениях. Конечно, я также сохраняю идентификатор университета при создании отдела, что довольно просто.
DepartmentSchema.post('save', function(next) {
var university = University.find({_id: this.university._id});
if(!university.departments) {
\t university.departments = []; \t
}
\t university.departments.push(new ObjectId(this._id));
university.save().exec();
next();
});
Это дает ошибку на этой линии, заявив, что не может распознать сохранить метод на объекте университета.
university.save().exec();
Я также попытался сделать это внутри контроллера модели сервера, но это не кажется правильным, поскольку большинство методов завернуты по запросу REST. Конечно, я могу справиться с этим с клиентской стороны, выполнив несколько запросов, но я полагаю, что есть способ сделать это на стороне сервера. Поскольку это очень внутренне относится к слою данных, на мой взгляд, я должен иметь возможность справиться с этим, используя промежуточное ПО mongo.
Теперь я положил внутри обратного вызова, а также с помощью обратного вызова для сохранения, но я все еще получаю ошибку на university.save 'DepartmentSchema.post ('сохранить', функция (следующий) { University.find ({ _id: this.university._id }, функция (эээ, университет) { если (! Университет.депозиты) { университет.департамент = []; } университет.departments.push (новый ObjectId (this._id)); университет.save (функция (ошибка) { if (err) return console.log ('err ->' + err) // сохранен! }); }); }); '' university.save (функция (ERR) { \t^ TypeError: Объект не имеет метода 'Сохранить' ' –