Javascript Mongodb E11000阵列字段上出现重复密钥错误

Javascript Mongodb E11000阵列字段上出现重复密钥错误,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有一个关于猫鼬模式的快速问题。代码如下: 我试图创建一个没有属性“work”的文档。它在第一次起作用,但在第二次没起作用,我又做了同样的事情。 你知道吗? 基本上,我创建了两个没有“work”属性的文档,这会导致重复键错误。然而,我没有设置unqiue:尽管如此 错误: "errmsg" : "E11000 duplicate key error collection: test.user index work_1 dup key: { : null } 从消息中可以看出,您的收藏有一个名为

我有一个关于猫鼬模式的快速问题。代码如下: 我试图创建一个没有属性“work”的文档。它在第一次起作用,但在第二次没起作用,我又做了同样的事情。 你知道吗? 基本上,我创建了两个没有“work”属性的文档,这会导致重复键错误。然而,我没有设置unqiue:尽管如此

错误:

"errmsg" : "E11000 duplicate key error collection: test.user index work_1 dup key: { : null }

从消息中可以看出,您的收藏有一个名为
work\u 1
的索引,可能位于字段
work
,因为您创建了一个没有
work
字段的文档,所以基本上您无法创建另一个没有工作字段的文档,而在同一个收藏中是如此,导致两个没有
工作
字段的文档,或者甚至是值为
null
工作
字段,或者相同的文档不能存在,因为它们违反了唯一的约束策略(它说
dup键:{:null}
)!!Uniques索引可以通过mongoose模式创建,也可以通过在数据库上手动运行查询来创建

Ref:在中搜索
唯一索引和缺少的字段

因此,您需要使用删除现有索引&然后,如果需要,使用重新创建它。如果在创建索引时至少有一个现有文档具有该索引字段的数组值,或者即使将来为该字段插入了数组值,MongoDB也会自动将创建的索引转换为(多键索引-数组字段上的索引)

通过代码-删除索引
yourSchema.dropIndex({yourFieldName:1})
&创建索引
yourSchema.index({yourFieldName:1})

注意:以防万一,如果您想在
唯一索引中使用某些条件,就像这个问题中的情况一样,索引字段可能在某些文档中丢失,但不应将其视为重复插入,那么您可以使用(搜索具有唯一约束的部分索引)它将只索引存在
工作
字段的文档

Ex部分索引:-

db.yourCollectionName.createIndex(
   { work: 1 },
   { unique: true, partialFilterExpression: { work: { $exists: true } } }
)

参考:

作为建议,请不要添加以文本格式添加的代码/错误图片。评论不用于扩展讨论;这段对话已经结束。