java MongoError:Spring引导抛出E11000重复密钥错误
我一直在尝试使用Spring boot创建MongoDB应用程序。但是,在启动之前,它会抛出E11000 Dup的异常。集合中的键错误。这个错误发生在启动时,虽然我已经验证了所有的点,但在我的数据中没有发现任何重复的键。 我的数据结构看起来像
@Document( collection = "IT" )
public class ItemType {
@Id
private String id;
private IV[] iv;
}
public class IV {
private String value;
private AP[] aps;
}
@Document( collection = "AP" )
public class AP {
@Id
private String id;
@Indexed( unique = true )
private String apc;
private String dim;
private string foc;
}
无论何时启动spring boot应用程序,它都会引发以下异常:
E11000 duplicate key error collection: p.IT index: iv.aps.apc dup key: { : "AVI" }
我的数据集是:
{
"_id" : ObjectId("5e846c5c3584fe7c7831283e"),
"iv" : [
{
"value" : "M",
"aps" : [
{
"apc" : "MOV"
},
{
"apc" : "AVI"
}
]
},
{
"value" : "N",
"aps" : [
{
"apc" : "MOV"
},
{
"apc" : "AVI"
}
]
},
{
"value" : "O",
"aps" : [
{
"apc" : "MOV"
}
]
},
{
"value" : "P",
"aps" : [
{
"apc" : "MOV"
}
]
}
]
}
我是MongoDB的新手,似乎我没有正确地创建数据结构。因为我愿意以一种方式创建对集合的引用,即我在另一个集合中使用的属性应该只有很少几个可用,也就是说,正如您所看到的AP有两个以上的属性。但是,我只使用了IV所需的apc
# 1 楼答案
在AP类中定义了唯一索引
然后在第四类中有一个AP对象数组
类中有一个IV对象数组
生成的索引将强制要求任何两个文档都不能有具有相同值的
apc
字段。MongoDB中的索引结构为k
->v
对,其中k
是值索引字段,v
是内部文档标识符(而不是_id)。如果同一个值在一个文档中多次出现,则只会将其添加到索引中一次unique属性在索引级别强制执行,因此单个文档可以重复该值,因为它只会在索引中产生一个条目,但其他文档则不能使用该值,因为它需要在索引中添加该值的第二个副本
为了将这一点带回数据,该示例文档包含两个不同的值,分别为
iv.aps.apc
、MOV
和AVI
。由于该字段是使用unique选项编制索引的,因此该集合中的任何其他文档都不能在该字段中包含这两个值