當您擁有非規範化模式時傳播更新的最佳方式是什麼?是否應該在同一個功能中完成?使用Mongoose進行非規範化:如何同步更改
我有一個模式,像這樣:
var Authors = new Schema({
...
name: {type: String, required:true},
period: {type: Schema.Types.ObjectId, ref:'Periods'},
quotes: [{type: Schema.Types.ObjectId, ref: 'Quotes'}]
active: Boolean,
...
})
然後:
var Periods = new Schema({
...
name: {type: String, required:true},
authors: [{type: Schema.Types.ObjectId, ref:'Authors'}],
active: Boolean,
...
})
現在說我要進行非規範化作者,因爲period
領域將始終只使用期限的名稱(是獨一無二的,不能有兩個同名的時期)。然後說,我把我的模式變成這樣:
var Authors = new Schema({
...
name: {type: String, required:true},
period: String, //no longer a ref
active: Boolean,
...
})
現在,貓鼬不知道週期字段已連接到週期模式。因此,當某個時期的名稱發生更改時,需要更新該字段。我創建了一個提供了接口,這樣的服務模塊:
exports.updatePeriod = function(id, changes) {...}
在這個函數中我經歷的變化來更新需要更新的時期文件。所以這是我的問題。那麼,我應該更新此方法中的所有作者嗎?因爲那麼該方法必須知道Author模式和任何其他使用句點的模式,從而在這些實體之間創建了很多耦合。有沒有更好的辦法?
也許我可以發出一個事件,一段時間已經更新,並且所有具有非規範化週期引用的模式都可以觀察到它,這是一個更好的解決方案嗎?我不太清楚如何解決這個問題。