临时表异常 - e11000 重复键错误
Posted
技术标签:
【中文标题】临时表异常 - e11000 重复键错误【英文标题】:Exception on temporary table - e11000 duplicate key error 【发布时间】:2021-05-06 00:27:43 【问题描述】:致敬!长期阅读,第一次提问。希望我能清楚地提出问题。
我遇到了一些我无法理解 MongoDB 操作的行为。
当访问我们的一个端点时,我们最初遇到的问题是多次 MongoDB 异常警报。
命令聚合失败:插入 $out 失败: lastOp: ts: Timestamp(1612204536, 11872), t: 45 , connectionId: 101263, err: "E11000 duplicate key error collection: qt.tmp.agg_out. 7907 索引:id 复制密钥::“jLCJp53””,代码:11000,代码名称:“DuplicateKey”,n:0,ok:1.0,操作时间:时间戳(1612204536,11872),$ clusterTime: clusterTime: Timestamp(1612204536, 11873), 签名: hash: BinData(0, 0000000000000000000000000000000000000000), keyId: 0 .
查看端点,它调用一个方法来获取请求集合,就像这样。我相信这个代码块中的 $out 会抛出异常:
public IEnumerable<Request> GetRequests(string courseId, string quizId = "", string questionId = "")
string tempColName = "tempQTCol-GetRequests-" + DateTime.Now.ToString("MMddyyyyhhmmssfff") + "-" + courseId + "-" + H.GenerateUniqueId();
var requests = GetCollection<Request>(CollectionName).Aggregate(new AggregateArgs
Pipeline = new[]
BsonDocument.Parse(" $match: $and: [ \"CourseId\": \"" + courseId
+ "\" , \"QuizId\": /.*" + quizId + ".*/i , \"QuestionId\": /.*" + questionId + ".*/i] "),
BsonDocument.Parse(" $out : \""+tempColName+"\" ")
).Select(s => BsonSerializer.Deserialize<Request>(s)).ToList();
DropCollection(tempColName);
return requests;
我不知道这是否是有用的信息,但因此,由于错误是在 DropCollection 之前引发的,我相信临时集合正在我们的数据库上创建并且永远不会被丢弃。
temporary database creation
在应用程序洞察中,有日志记录尝试发布到端点,它会抛出一个 500 错误,并带有我在上面发布的 MongoDB 异常。
提前感谢您的时间和考虑。我对 mongo 不是很熟悉,但我会尽力提供任何需要的信息。
【问题讨论】:
【参考方案1】:您有 id dup 键: : "jLCJp53" " ,您可能需要在每次插入文档之前删除临时集合,或者您需要允许自动生成 _id 键(默认情况下自动生成每个进程生成的 mongodb _id 键是唯一的)
【讨论】:
以上是关于临时表异常 - e11000 重复键错误的主要内容,如果未能解决你的问题,请参考以下文章
MongoError:E11000 重复键错误集合:annka.transactions 索引:assets_1 重复键::null