Mongo 更新响应说没有更新文件,但文件在那里
Mongo update response says no document updated, but the document is there
我正在使用 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为真,无错误信息
什么会导致失败?
有可能当文档已经存在并且与之前的文档完全相同时,不需要更改,因此 DocumentsAffected 属性 将为 0。您可以在此处查看文档:https://docs.mongodb.org/manual/reference/method/WriteResult/#WriteResult。您可以在结果的 Response 属性 中看到这些属性。
我不是专家,但我的猜测是写入问题,因为在 MongoDB 中写入和更新文档有不同级别的保证。参见 Write Concerns
所以不用这个 method:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate)
最好改用 method:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate, WriteConcern)
并指定 WriteConcern 为
WriteConcern.WMajority
这样更新保证最高。
我正在使用 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为真,无错误信息
什么会导致失败?
有可能当文档已经存在并且与之前的文档完全相同时,不需要更改,因此 DocumentsAffected 属性 将为 0。您可以在此处查看文档:https://docs.mongodb.org/manual/reference/method/WriteResult/#WriteResult。您可以在结果的 Response 属性 中看到这些属性。
我不是专家,但我的猜测是写入问题,因为在 MongoDB 中写入和更新文档有不同级别的保证。参见 Write Concerns
所以不用这个 method:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate)
最好改用 method:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate, WriteConcern)
并指定 WriteConcern 为
WriteConcern.WMajority
这样更新保证最高。