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

Ass*_*vie 8 transactions mongodb

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

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

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

**编辑**

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

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

Chr*_*tow 6

是的,这是可能的,只要您将历史记录保存在单个文档中即可.MongoDB支持文档范围内的原子更新,但不支持集合中的多个文档.

因此,您可以使用如下的模式将历史记录嵌入到数组中:

{
    _id: 12345,
    value: "Apple",
    history:
    [
        { revisionid: 2, value: "Orange" },
        { revisionid: 1, value: "Pear" }
    ]
}
Run Code Online (Sandbox Code Playgroud)

例如,您可以插入新文档:

db.things.insert( { _id: 123, value: "Apple" } )
Run Code Online (Sandbox Code Playgroud)

然后在一个原子操作中更新它:

db.things.update( { _id: 123 },
    {
        $set: { value: "Orange" },
        $push : { history : { revisionid: 1, value: "Apple" } }
    }
)
Run Code Online (Sandbox Code Playgroud)