【发布时间】:2026-01-28 03:25:01
【问题描述】:
这个不时出现。我将操作作为 upsert 完成,但每隔一段时间,服务就会崩溃,因为它遇到了这个错误,我什至不明白它是怎么可能的。我尝试使用 SurveyId 作为匹配键来执行 upsert:
await _surveyRepository.DatabaseCollection.UpdateOneAsync(
Builders<SurveyData>.Filter.Eq(survey => survey.SurveyId, surveyData.SurveyId),
Builders<SurveyData>.Update
.Set(survey => survey.SurveyLink, surveyData.SurveyLink)
.Set(survey => survey.ClientId, surveyData.ClientId)
.Set(survey => survey.CustomerFirstName, surveyData.CustomerFirstName)
.Set(survey => survey.CustomerLastName, surveyData.CustomerLastName)
.Set(survey => survey.SurveyGenerationDateUtc, surveyData.SurveyGenerationDateUtc)
.Set(survey => survey.PortalUserId, surveyData.PortalUserId)
.Set(survey => survey.PortalUserFirst, surveyData.PortalUserFirst)
.Set(survey => survey.PortalUserLast, surveyData.PortalUserLast)
.Set(survey => survey.Tags, surveyData.Tags),
new UpdateOptions { IsUpsert = true })
.ConfigureAwait(false);
我偶尔会收到这个错误:
消息:写入操作导致错误。 E11000 重复 键错误收集:surveys.surveys 索引:SurveyId 重复键:{: "" }
id 是 Guid 的字符串表示形式,在 mongo 中设置为唯一。
那么为什么会发生这种情况呢?我的理解是,如果找到密钥,它将更新定义的属性,如果没有,它将插入。这不正确吗?因为,这就是我需要的效果。
C#驱动版本为2.4.1.18
【问题讨论】:
标签: mongodb mongodb-.net-driver