为啥插入子文档数组时出现“重复键错误”?
Posted
技术标签:
【中文标题】为啥插入子文档数组时出现“重复键错误”?【英文标题】:Why "duplicate key error" when inserting subdocument arrays?为什么插入子文档数组时出现“重复键错误”? 【发布时间】:2019-12-12 06:55:41 【问题描述】:我有一个使用子文档的 Mongoose 架构。它们的定义是:
const vraagSchema = new mongoose.Schema(
vraagNummer:
type: Number,
required: true,
min: 1
,
vraagTekst:
type: String,
minLength: 1,
required: true
,
waarde:
type: Number,
required: true,
min: 1
, collection: 'vragen' );
const checkSchema = new mongoose.Schema(
checkID:
type: String,
required: true,
min: 2
,
sessieNummer:
type: Number,
required: true,
min: 1
,
omschrijving:
type: String,
required: true
,
vragen:
type: [vraagSchema]
,
logData:
type: String,
required: false,
default: ''
);
checkSchema.index( sessieNummer: 1, checkID: 1 , unique: true )
现在,当我为“vragen”字段插入 1 个带有空数组的检查项目(“vragen”是荷兰语的“问题”)时,没有问题。 但是,当我尝试插入另一个 Check 项时,字段值略有不同(因此它是唯一的),而且还有一个空数组“[]”作为“vragen”的值,我收到一个错误:“MongoError:E11000 重复关键错误集合:demastermind_test.checks 索引:vragen.vraagNummer_1 dup key::null”。
为什么空数组会导致重复键错误?我该如何防止这种情况发生?
然后我检查了如果我插入带有非空数组的 Check 项会发生什么。所以我插入了两个具有不同字段值的检查(因此它们是唯一的),其中 1 个项目有一个“vragen”数组,其中包含“vraag”项目,1 个项目有一个“vragen”数组,其中有两个“vraag”项目他们(我确保这两个项目有不同的“vraagNummer”waardes)。 这也会导致完全相同的重复键错误。
我错过了什么?
【问题讨论】:
【参考方案1】:我已经解决了这个问题。显然,当我开始处理这个问题时,我使用了不正确的架构定义(或其他东西),并且该错误在 de Collection 中“卡住”了。
我通过删除整个集合解决了这个问题(它目前是一个测试集合,所以这不是问题),现在它可以正常工作了。
【讨论】:
以上是关于为啥插入子文档数组时出现“重复键错误”?的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter:当我插入数据时出现重复键错误,我该如何处理这个错误?