Скажем, у меня есть модель User
и модель Book
в моем приложении Express, которые оба ссылаются друг на друга - как я могу использовать промежуточное ПО mongoose для синхронизации обеих моделей при сохранении любой из моделей?
Думаю, было бы неплохо, если бы я мог использовать следующую структуру, чтобы при изменении имени Book
он также обновлялся в своем авторе User
и наоборот.
Проблема, конечно, в том, что модель User
ссылается на модель Book
, а модель Book
ссылается на модель User
- циклическая ссылка. Есть ли способ обойти это аккуратно и обычным способом?
user.model.js
const { mongoose } = require('../db/mongoose');
const Schema = mongoose.Schema;
const Book = require('./book.model.js'); // <--- REFERENCING BOOK
const UserSchema = new Schema({
name: String,
books: [
{
_id: Schema.Types.ObjectId,
title: String,
},
],
});
UserSchema.pre('save', function() {
if (this.isModified('name')) {
Book.findAndUpdate({
'author._id': this._id,
}, {
// update name of book author
'author.name': this.name,
});
}
});
book.model.js
const { mongoose } = require('../db/mongoose');
const Schema = mongoose.Schema;
const User = require('./user.model.js'); // <--- REFERENCING USER
BookSchema = new Schema({
title: String,
author: {
_id: Schema.Types.ObjectId,
name: String,
},
});
BookSchema.pre('save', function() {
if (this.isModified('title')) {
User.findByIdAndUpdate(this.author._id, {
// update the book title
...
});
}
});