我意识到MongoDB是一个NoSQL解决方案,但我想知道它是否有某种等同于序列化级别的事务隔离级别。
如果没有,您将如何解决MongoDB中的丢失更新问题?
我想保留Mongo中某些数据的修订历史记录,每个修订版都必须指向它之前的版本。如何确保我的数据不超过一个最新版本,另一方面由于并发更新而没有修订版本丢失?
**编辑**
哎呀,RTFM,确实有可能:http://www.mongodb.org/display/DOCS/Atomic+Operations
不确定我是否应该关闭这个问题,因为知识可能与其他人有关..
答案 0 :(得分:6)
是的,只要您将历史记录保存在单个文档中,这是可能的。 MongoDB支持文档范围内的atomic updates,但不支持集合中的多个文档。
因此,您可以使用类似这样的模式将历史记录嵌入到数组中:
{
_id: 12345,
value: "Apple",
history:
[
{ revisionid: 2, value: "Orange" },
{ revisionid: 1, value: "Pear" }
]
}
例如,您可以插入新文档:
db.things.insert( { _id: 123, value: "Apple" } )
然后在一个原子操作中更新它:
db.things.update( { _id: 123 },
{
$set: { value: "Orange" },
$push : { history : { revisionid: 1, value: "Apple" } }
}
)