javascript - 数组字段上的Mongodb E11000重复键错误
问题描述
我有一个关于猫鼬模式的快速问题。这是代码:https ://i.ibb.co/Db8xPMw/5555.png 我试图创建一个没有属性“工作”的文档。它在第一次工作,但它并没有开始工作,第二次我再次做同样的事情。你有什么主意吗?基本上,我创建了两个没有“工作”属性的文档,这会导致重复键错误。但是,我没有设置 unqiue: true 。
错误 :
"errmsg" : "E11000 duplicate key error collection: test.user index work_1 dup key: { : null }
解决方案
从消息中它说您的集合有一个名称work_1
可能在字段上的索引work
,由于您创建了一个没有work
字段的文档,那么基本上您不能在同一个集合中创建另一个没有工作字段的文档,导致两个文档没有work
字段或即使work
值等于null
或相同的字段也不能存在,因为它违反了唯一的约束策略(它说dup key : { : null}
)!唯一索引可以通过猫鼬模式创建,也可以通过在数据库上手动运行查询来创建。
Ref :Unique Index and Missing Field
在index-unique中搜索
因此,您需要使用dropIndex删除现有索引,然后在需要时使用createIndex重新创建它。如果至少一个现有文档在您创建索引时具有该索引字段的数组值,或者即使插入了一个数组值,MongoDB 会自动将创建的索引转换为index-multikey (多键索引 - 数组字段上的索引)未来的那个领域。
通过代码 - 删除索引:yourSchema.dropIndex({yourFieldName: 1})
&&创建索引:yourSchema.index({yourFieldName : 1})
注意:以防万一你想在unique indexes
这个问题的类似情况下有某些标准,在某些文档中可能缺少索引字段但它不应该被视为重复插入,那么你可以使用部分索引(搜索具有唯一约束的部分索引),它只会索引work
字段存在的文档。
部分索引的前:-
db.yourCollectionName.createIndex(
{ work: 1 },
{ unique: true, partialFilterExpression: { work: { $exists: true } } }
)
参考: 猫鼬索引
推荐阅读
- javascript - Angular 购物车应用程序 - 页面需要刷新,DOM 才能接受更改
- asp.net-core - 如何使用 IApplicationBuilder 的 ApplicationServices
- powershell - Powershell ORA-00933 从 .sql 文件执行 sql 查询时出错
- elasticsearch - ELASTICSEARCH - 从最近的文档中获取值的计数
- java - 为什么某些 JavaFX 几何方法对于较小的内存占用不是静态的?
- react-native - 无法在本机反应中调用 ussd
- go - 如何更新数组的结构数据
- sql - 如果在表中发现重复数据(不是重复记录),则抛出错误
- wso2 - 在 wso2 身份服务器中自定义授予引用完整性约束违规
- awk - 为什么双引号在 awk 脚本中的 cmd 内的 echo 语句中不起作用?