Mongo更新响应表示没有更新文档,但文档已存在

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是真的,没有错误信息.

什么可能导致失败?

Vii*_*orm 1

我不是专家,但我的猜测是写入问题,因为在 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)

这样更新就有最高的保证。