想象一下,我有一个像这样的文档结构。
{
_id: ObjectId('internalId'),
externalId: 'externalId',
history: [
{
effective: ISODate('2000-02-01T00:00:00.000Z'),
property: 'new value'
},
{
effective: ISODate('2000-01-01T00:00:00.000Z'),
property: 'value'
}
]
}
每次阅读本文档时,所有属性都会按历史顺序合并到最终状态,可能会在特定时间点停止。
要添加新的历史记录项,我需要执行类似的操作。
{
$push: {
history: {
property: 'even newer value',
effective: new Date()
}
},
$setOnInsert: {
externalId: externalId
}
}
我想找到一种方法来确保永远不会存储不修改实际合并历史状态的更新。然而,似乎这需要单独的读操作,因此需要保持(外部)悲观锁,同时确定是否可以继续进行修订。
这感觉就像是一个不正确的设计。救命啊!