MongoException:带有名称的索引:代码已经存在不同的选项



我有一个 mongodb集合term带有以下结构

{
    "_id" : "00002c34-a4ca-42ee-b242-e9bab8e3a01f",
    "terminologyClass" : "USER",
    "code" : "X67",
    "terminology" : "some term related notes",
    "notes" : "some notes"
}

和一个表示术语集合为 Term.java

的Java类
@Document
public class Term{  
    @Id
    protected String termId;
    @Indexed
    protected String terminologyClass;
    @Indexed(unique=true)
    protected String code;
    @Indexed
    protected String terminology;
    protected String notes;
    //getters & setters
}

我在term收藏中有很多文档。现在,我被添加到Term.java的新字段

@Indexed
protected String status;

将字段 status添加到 Term.java之后,在将新术语插入 term集合时,我会得到Axtectoin:

com.mongodb.mongoexception:带有名称的索引:代码已经存在 不同的选项

我正在使用MongoDB版本:2.6.5和Spring-Data-Mongodb版本:1.3.2

您已经在该集合上具有相同名称的索引,但定义不同。我的猜测是您当前的代码索引是非唯一的

尝试: db.Term.getIndexes()

如果确实如此(您在代码字段上有一个非唯一索引),请发行: db.Term.dropIndex("code_1")(替换为代码字段索引名称)。

下次您启动应用程序时,应该可以正常工作。

或者,从@Indexed注释中删除唯一属性(如果不以外的话,则是唯一的)。

您是否试图放弃收藏品然后重试?通常,将新的Java映射应用于现有MongoDB Collection

时有许多冲突

尝试创建多个复合 text 索引也可能导致此错误。

只有一个文本每个文档每个集合允许搜索文本搜索索引。

在多端数据库中,我们想使用复合索引在每个客户的数据中执行唯一性。

db.users.createIndex( { customer: "text", email: "text"}, { unique: true } );
db.users.createIndex( { customer: "text", cell: "text"}, { unique: true } );

这样做会导致OP的错误。

但是,将它们更改为常规指数解决了问题。

db.users.createIndex( { customer: 1, email: 1}, { unique: true } );
db.users.createIndex( { customer: 1, cell: 1}, { unique: true } );

相关内容

  • 没有找到相关文章

最新更新