85 IndexOptionsConflict: Index already exists with different options / different name(異なるオプション/名前のインデックスが既に存在する)
MongoDB意味
作成しようとしているインデックスが既存のインデックスと競合している: 同名のインデックスのオプションが異なる、または同じキーとオプションを持つ同等のインデックスが別名で既に存在する。MongoDB は競合する定義で同じインデックスを再作成することを許可しない。
原因
同じ名前とキーで異なるオプション (例: expireAfterSeconds、partialFilterExpression、collation) のインデックスを作成した、または既存インデックスと同等のものを別名で再定義した ('Index already exists with a different name')。アプリケーション/マイグレーションスクリプトでインデックス定義が時間とともにずれていくのが典型的な原因。同じ名前で異なるキーの場合は、代わりに 86 IndexKeySpecsConflict となる。
対処方法
既存のインデックスを確認する: db.my_collection.getIndexes()。本当にオプションを変更したい場合は、古いインデックスを削除して新しいものを作成する: db.my_collection.dropIndex('index_name') の後に createIndex(...)。そうでなければ、定義を既存のインデックスと完全に一致させるか、新しいインデックスに別の名前を付ける。マイグレーションスクリプトを冪等にする。
同じデータベースの他の項目
- 20 IllegalOperationIllegal operation(不正な操作)
- 48 NamespaceExistsNamespace (collection) already exists(名前空間 (コレクション) が既に存在する)
- 11601 InterruptedOperation was interrupted(操作が中断された)
- 67 CannotCreateIndexCannot create index(インデックスを作成できない)
- 27 IndexNotFoundIndex not found(インデックスが見つからない)
- 79 UnknownReplWriteConcernUnknown replica set write concern(不明なレプリカセット write concern)
- 10107 NotWritablePrimarynot master / not writable primary(マスターではない / 書き込み可能なプライマリではない)