Nik*_*hil 8 c# mongodb mongodb-.net-driver
我正在使用MongoDb 2.6.10并使用C#Driver 1.9.2.服务器具有两个服务器的复制.
我的文件是格式的.itemId是唯一的.
{
"itemID": 2314,
"Favorites": [1, 24, 26, 34]
}
Run Code Online (Sandbox Code Playgroud)
然后我有代码删除表单的最爱
var query = Query.EQ("itemID", itemId);
var result = collection.Update(query, Update.Pull("Favorites", favoriteIdToRemove));
Run Code Online (Sandbox Code Playgroud)
每次之后,我检查结果.DocumentsAffected等于1.偶尔,该值返回0.当我自己进入MongoDB时,我可以找到与itemID匹配的文档,我可以看到favoriteId它试图在数组中删除仍然存在.result.OK是真的,没有错误信息.
什么可能导致失败?
我不是专家,但我的猜测是写入问题,因为在 MongoDB 中写入和更新文档有不同级别的保证。请参阅写问题
所以不要使用这种方法:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate)
Run Code Online (Sandbox Code Playgroud)
使用这种方法可能会更好:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate, WriteConcern)
Run Code Online (Sandbox Code Playgroud)
并将 WriteConcern 指定为
WriteConcern.WMajority
Run Code Online (Sandbox Code Playgroud)
这样更新就有最高的保证。