使用.NET进行MongoDB乐观并发控制

时间:2015-11-25 23:21:29

标签: .net mongodb mongodb-.net-driver optimistic-concurrency

使用.NET MongoDB API(MongoDB.Driver),实现乐观并发控制的推荐方法是什么?例如,有什么类似于SQL Server的ROWVERSION / TIMESTAMP,例如,每当文档发生变化时自动更新的属性?还是有触发机制?还是其他任何机制?

1 个答案:

答案 0 :(得分:4)

MongoDB中没有关于乐观并发的内置任何内容。如果需要,您需要自己实现。

您可以通过添加DateTime时间戳,在执行更新之前读取它并使用该时间戳作为更新过滤器来实现。如果在您有机会更新之前更改了时间戳,则更新操作无法找到该文档。

例如:

UpdateResult updateResult;
do
{
    var document = await collection.Find(_ => _.Id == id).SingleAsync(); // Get the current document
    updateResult = await collection.UpdateOneAsync(_ => _.Id == id && _.TimeStamp == document.TimeStamp, Builders<Item>.Update...); // Update the document only if the timestamp is the same
} while (updateResult.ModifiedCount == 0); // Try until an update was successfull