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仍然存在。 结果。"确定"为真,并且没有错误信息。

什么可能导致此失败?

Mongo 更新响应显示未更新文档,但文档在那里

我不是专家,但我的猜测是写入问题,因为在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。可以在结果的"响应"属性中看到这些属性。