20

次の構造のmongodbコレクションがありますterm

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

用語コレクションを表すJavaクラスTerm.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.javaasに追加されました

@Indexed
protected String status;

statusにフィールドを追加した後Term.java、コレクションに新しい用語を挿入しtermているときに、exceptoin を取得しています。

com.mongodb.MongoException: 名前のインデックス: コードは別のオプションで既に存在します

MongoDB バージョン: 2.6.5 および spring-data-mongodb バージョン: 1.3.2 を使用しています。

4

3 に答える 3

19

そのコレクションには同じ名前のインデックスが既にありますが、定義は異なります。私の推測では、現在のコード インデックスは一意ではありません

試す: db.Term.getIndexes()

これが実際に当てはまる場合 (コード フィールドに一意でないインデックスがある場合)、発行: db.Term.dropIndex("code_1") (コード フィールドのインデックス名に置き換えます)。

次にアプリケーションを起動すると、問題なく動作するはずです。

または、一意の属性を@Indexed注釈から削除します (一意であることを除外しない場合)。

于 2015-05-14T08:10:42.287 に答える
4

コレクションを削除して、もう一度試してみましたか? 通常、新しい Java マッピングを既存の mongodb コレクションに適用する際に、多くの競合が発生します。

于 2015-05-14T08:01:48.277 に答える