gpt4 book ai didi

c# - ReplaceOne 方法的过滤器匹配文档,不执行替换

转载 作者:IT老高 更新时间:2023-10-28 13:30:03 27 4
gpt4 key购买 nike

我在使用 MongoDB 的 C# 驱动程序时遇到了一些奇怪的行为。我正在尝试执行替换多个字段的更新,因此我正在使用 API 中的 ReplaceOneAsync() 方法。我与任何集合的连接都是使用 WriteConcern.Acknowledged 建立的,因此我可以处理数据库因任何原因而无法更新的情况(例如在这种情况下)。

有时数据库不会更新记录,但我无法确定为什么。在尝试调试这种情况时,我正在查看从 ReplaceOneAsync 方法返回的 ReplaceOneResult 对象,它显示 MatchedCount = 1,但 ModifiedCount = 0,如下面的调试器截图所示:

Debugging Screenshot

这怎么可能?如果它与我要替换的一个 id 匹配,为什么它不执行修改?这是否意味着发生某种错误状态导致它静默失败?它不会抛出任何异常,所以如果是这种情况,我该如何确定出了什么问题?

下面是简单的更新方法:

public virtual async Task<bool> Update(T entity)
{
if (entity.Id == ObjectId.Empty)
throw new ArgumentException("Id must be available and in the database to perform an update.");

ReplaceOneResult result = await this.MongoConnectionHandler.MongoCollection.ReplaceOneAsync(e => e.Id == entity.Id, entity);
return result.ModifiedCount > 0;
}

最佳答案

如果 MatchedCount = 1 且 ModifiedCount = 0,那应该是因为您的替换文档与现有文档相同。

所以它们匹配,但不需要替换,因为它们是相同的。

关于c# - ReplaceOne 方法的过滤器匹配文档,不执行替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32633345/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com