DBAtlas · データベース運用アトラス

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(...)。そうでなければ、定義を既存のインデックスと完全に一致させるか、新しいインデックスに別の名前を付ける。マイグレーションスクリプトを冪等にする。

DBAtlas で開く →

同じデータベースの他の項目