我使用的是 MongoDb 2.6.10 和 C# Driver 1.9.2。服务器有一个由两台服务器组成的副本集。
我的文件是格式。 itemId 是唯一的。
{
"itemID": 2314,
"Favorites": [1, 24, 26, 34]
}
然后我有代码来删除表单的收藏夹
var query = Query.EQ("itemID", itemId);
var result = collection.Update(query, Update.Pull("Favorites", favoriteIdToRemove));
每次之后,我检查 result.DocumentsAffected 是否等于 1。偶尔,该值会返回为 0。当我自己进入 MongoDB 时,我可以找到与 itemID 匹配的文档,我可以看到它试图在数组中删除的 favoriteId 仍然存在。 result.OK 为真,没有错误信息。
什么会导致这个失败?
最佳答案
我不是专家,但我的猜测是写入问题,因为在 MongoDB 中写入和更新文档有不同级别的保证。见 Write Concerns
所以不要使用 method :
MongoCollection.Update Method (IMongoQuery, IMongoUpdate)
最好用这个method而是:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate, WriteConcern)
并指定 WriteConcern 为
WriteConcern.WMajority
这样更新保证最高。
关于c# - Mongo 更新响应说没有更新文档,但是文档在那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34819208/