如何使两个mongodb查询原子?

时间:2015-12-17 14:56:37

标签: c# mongodb wcf transactions atomicity

我正在进行两个连续的查询,以便更新3级深度数组项(因为位置运算符不足以满足mongodb中{2}更深的对象;如[{3}}中所知)。

以下是我的疑问:

#region Remove Folder

await new DbContext().Personnels.FindOneAndUpdateAsync(
        Builders<Personnel>.Filter.And(
            Builders<Personnel>.Filter.Eq("_id", PersonnelId),
            Builders<Personnel>.Filter.Eq("Devices._id", DeviceId)),
        Builders<Personnel>.Update.PullFilter("Devices.$.Folders",
        Builders<DeviceCloudFolder>.Filter.Eq("FolderId", FolderId)));

#endregion

#region Add Folder again

await new DbContext().Personnels.FindOneAndUpdateAsync(
        Builders<Personnel>.Filter.And(
            Builders<Personnel>.Filter.Eq("_id", PersonnelId),
            Builders<Personnel>.Filter.Eq("Devices._id", DeviceId)),
        Builders<Personnel>.Update.Push("Devices.$.Folders", folder));

#endregion

这样我可以更新folder对象,但这肯定会导致一些并发问题。此查询由WCF服务(每个请求的实例)方法进行。由于对服务的不同调用可以同时调用方法,因此它们将破坏事务。

我想知道标准this feature request是否可以在“每个请求的实例中使用wcf proccesses”(我猜不是)?

我考虑过生成文件锁(在进行这两个查询之前打开文件,在查询结束时关闭文件,然后等待该文件上的自旋锁以获取其他同时请求),但这似乎没有效率很高。

我想知道存在哪种解决方法?

0 个答案:

没有答案