MongoDB中的序列化“隔离级别”,或丢失更新问题

时间:2011-05-20 15:56:29

标签: mongodb transactions

我意识到MongoDB是一个NoSQL解决方案,但我想知道它是否有某种等同于序列化级别的事务隔离级别。

如果没有,您将如何解决MongoDB中的丢失更新问题?

我想保留Mongo中某些数据的修订历史记录,每个修订版都必须指向它之前的版本。如何确保我的数据不超过一个最新版本,另一方面由于并发更新而没有修订版本丢失?

**编辑**

哎呀,RTFM,确实有可能:http://www.mongodb.org/display/DOCS/Atomic+Operations

不确定我是否应该关闭这个问题,因为知识可能与其他人有关..

1 个答案:

答案 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" } }
    }
)