当您拥有非规范化模式时传播更新的最佳方式是什么?是否应该在同一个功能中完成?使用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模式和任何其他使用句点的模式,从而在这些实体之间创建了很多耦合。有没有更好的办法?
也许我可以发出一个事件,一段时间已经更新,并且所有具有非规范化周期引用的模式都可以观察到它,这是一个更好的解决方案吗?我不太清楚如何解决这个问题。