Mongo 更新响应显示未更新文档,但文档在那里
本文关键字:文档 更新 在那里 响应 显示 Mongo | 更新日期: 2023-09-27 18:30:38
我正在使用MongoDb 2.6.10和C#驱动程序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));
每次之后,我都会检查结果。受影响的文档等于 1。 有时,该值会返回为 0。 当我自己进入MongoDB时,我可以找到与itemID匹配的文档,并且我可以看到它试图在数组中删除的收藏夹ID仍然存在。 结果。"确定"为真,并且没有错误信息。
什么可能导致此失败?
我不是专家,但我的猜测是写入问题,因为在MongoDB中写入和更新文档有不同的保证级别。请参阅写入关注点
因此,不要使用此方法:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate)
最好改用此方法:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate, WriteConcern)
并将写入关注指定为
WriteConcern.WMajority
这样,更新就有了最高的保证。
当文档已存在并且与以前的文档完全相同时,可能不需要进行任何更改,因此,DocumentsAffected 属性将为 0。您可以在此处查看文档:https://docs.mongodb.org/manual/reference/method/WriteResult/#WriteResult。可以在结果的"响应"属性中看到这些属性。