c# - Mongo 更新响应说没有更新文档,但是文档在那里

标签 c# mongodb mongodb-.net-driver

我使用的是 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/

相关文章:

c# - 线程、中止和等待

c# - 将数据从 SQL Server 导出到 C# 中的文本文件(保存到特定文件夹)

mysql - Web服务器和api服务器-配置和代码上传

mongodb - 从mongo服务器开始的Docker容器

c# - 使用 C# BsonArray 在 MongoDB 集合中插入多个文档

c# - Mongodb,linq 驱动程序。如何使用变量或语句构造包含

c# - 查询 documentdb 中的子字段

c# - 使用哪个,C# 还是 F#?在这个 "real world"案例中

C# 使用 proto-buf 序列化继承的类,而不使用 ProtoInclude

java - 我可以使用 JNDI 共享 MongoClient 实例吗?