gpt4 book ai didi

java - 蒙戈错误: Spring Boot throws E11000 duplicate key error

转载 作者:行者123 更新时间:2023-12-01 17:08:07 24 4
gpt4 key购买 nike

我一直在尝试使用 Spring boot 创建一个 MongoDB 应用程序。但是,在启动之前它会抛出 E11000 Dup 异常。集合中的关键错误。尽管我已经验证了所有点,但在启动时出现此错误,但是我在数据中没有找到任何重复的 key 。我的数据结构看起来像

@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 具有超过 2 个属性。但是,我只使用 IV 所需的 apc

最佳答案

您在 AP 类中定义了唯一索引

    @Indexed( unique = true )
private String apc;

然后你就有了 IV 类中的 AP 对象数组

private AP[] aps;

以及 IT 类中的 IV 对象数组

private IV[] iv;

生成的索引将强制不允许两个文档的 apc 字段具有相同的值。 MongoDB 中的索引由一组 k->v 对构成,其中 k 是值索引字段, v 是内部文档标识符(不是 _id)。如果相同的值在单个文档中出现多次,则只会将其添加到索引中一次。

唯一属性在索引级别强制执行,因此单个文档可以重复该值,因为它只会在索引中产生单个条目,但其他文档不能使用该值,因为它需要添加索引中的第二个副本。

为了将其带回到您的数据中,该示例文档包含 iv.aps.apcMOVAVI 的 2 个不同值>。由于它是使用 unique 选项建立索引的,因此该集合中的任何其他文档都不能在该字段中包含这些值中的任何一个。

关于java - 蒙戈错误: Spring Boot throws E11000 duplicate key error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61445750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com