これは時々崩壊し続けるものです。私はupsertとして行われた操作を持っていますが、たまには、このエラーに遭遇してサービスがクラッシュするため、どのように可能なのか理解できません。私は、一致させるのキーとしてSurveyIdを使用してアップサートをしよう:重複したID例外が発生すると、なぜこのアップセルが失敗するのですか?
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);
そして、私は時折、このエラーを取得します:
Message: A write operation resulted in an error. E11000 duplicate key error collection: surveys.surveys index: SurveyId dup key: { : "" }
IDにGUIDの文字列表現で、 mongoではユニークに設定されています。
これはどうしてですか?キーを見つけたら定義されたプロパティを更新し、そうでなければ挿入することは私の理解です。それは間違っていますか?なぜなら、それは私が必要とする効果です。
C#のドライバのバージョンは2.4.1.18
意図した効果ではないこと。それは単にアップデートに過ぎません。私はアップセートが必要です。 IDが見つかった場合は、指定されたデータでレコードを更新し、見つからない場合は、指定されたフィールドで新しいレコードを挿入する必要があります。それは決して失敗しないはずです。 – Sinaesthetic