Spring Data MongoDb-嵌入带有@index(unique=true)的文档

Spring Data MongoDb-嵌入带有@index(unique=true)的文档,mongodb,spring-data,Mongodb,Spring Data,我定义了以下集合: @Document(collection="sectors") public class Sector { private final String id = null; @Indexed(unique=true) private String name; } @Document(collection="companies") public class Company { @Id private UUID uid;

我定义了以下集合:

@Document(collection="sectors")
public class Sector {

    private final String id = null;
    @Indexed(unique=true)  
    private String name;


}


@Document(collection="companies")
public class Company {

    @Id
    private UUID uid; 
    @Indexed(unique=true)
    private String nif;
    private String name;
    private List<Sector> sectors = new ArrayList<>();
}
@文档(collection=“sections”)
公营部门{
私有最终字符串id=null;
@索引(唯一=真)
私有字符串名称;
}
@文件(收集=“公司”)
公营公司{
@身份证
私有UUID;
@索引(唯一=真)
私有字符串nif;
私有字符串名称;
私有列表扇区=新的ArrayList();
}
如果我尝试插入两个具有相同行业的公司,那么我将得到
“E11000重复密钥错误索引:false.companys.sections.name重复密钥:{[[sector1,sector2]]}”


从它工作的扇区注释出索引(unique=true)
。为什么会这样?是一只虫子吗?我希望部门实体按名称进行唯一索引,两家公司在共享相同部门时应该没有问题。

您当前创建的部门不是作为单独的文档,而是作为嵌套对象。这意味着spring数据将忽略
@文档
注释,并使用
@索引的
注释。并非每个公司都有一个独特的行业

不过。如果您试图在部门和公司之间创建关系,则应为
私有列表部门=新ArrayList()添加
@DBRef


这样,Spring数据将引用该扇区。请注意,mongoDB不会为您级联,您必须先创建扇区,然后才能将其引用为DBRef。另一种方法是只保存扇区ID,并在需要时手动获取它。

您当前创建的扇区不是作为单独的文档,而是作为嵌套对象。这意味着spring数据将忽略
@文档
注释,并使用
@索引的
注释。并非每个公司都有一个独特的行业

不过。如果您试图在部门和公司之间创建关系,则应为
私有列表部门=新ArrayList()添加
@DBRef


这样,Spring数据将引用该扇区。请注意,mongoDB不会为您级联,您必须先创建扇区,然后才能将其引用为DBRef。另一种方法是只保存扇区ID,并在需要时手动获取它。

这就是索引的工作方式。它们在集合中的所有文档中都是唯一的,而不是在单个文档中。瞧,维拉姆哦,好吧,那太糟糕了。这就是索引的工作方式。它们在集合中的所有文档中都是唯一的,而不是在单个文档中。瞧,维拉姆哦,好吧,那太糟糕了。tyI不想使用@DBRef,因为我想在查询时能够访问扇区属性。我不想使用@DBRef,因为我想在查询时能够访问扇区属性。