我正在进行两个连续的查询,以便更新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”(我猜不是)?
我考虑过生成文件锁(在进行这两个查询之前打开文件,在查询结束时关闭文件,然后等待该文件上的自旋锁以获取其他同时请求),但这似乎没有效率很高。
我想知道存在哪种解决方法?