MongoServerError: Collection already exists. Options in createCollection command conflict with existing collection options
ID: database/mongodb-cannot-create-collection-options-conflict
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| MongoDB 5.0 | active | — | — | — |
| MongoDB 6.0 | active | — | — | — |
| MongoDB 7.0 | active | — | — | — |
| MongoDB 8.0 | active | — | — | — |
Root Cause
A collection with the same name already exists but with different options (e.g., different collation, validation rules, or storage engine settings) than those specified in the createCollection command.
generic中文
同名的集合已存在,但其选项(例如,不同的排序规则、验证规则或存储引擎设置)与 createCollection 命令中指定的选项不同。
Official Documentation
https://www.mongodb.com/docs/manual/reference/method/db.createCollection/Workarounds
-
85% success Check the existing collection options with `db.getCollectionInfos({name: 'mycollection'})`. If the options are acceptable, use the existing collection without modification. If not, rename the old collection: `db.mycollection.renameCollection('mycollection_old')` and then create the new one with desired options: `db.createCollection('mycollection', {collation: {locale: 'en', strength: 2}, validator: {email: {$type: 'string'}}})`
Check the existing collection options with `db.getCollectionInfos({name: 'mycollection'})`. If the options are acceptable, use the existing collection without modification. If not, rename the old collection: `db.mycollection.renameCollection('mycollection_old')` and then create the new one with desired options: `db.createCollection('mycollection', {collation: {locale: 'en', strength: 2}, validator: {email: {$type: 'string'}}})` -
70% success Use collMod to modify compatible options: `db.runCommand({collMod: 'mycollection', validator: {email: {$type: 'string'}}, validationLevel: 'strict'})`. For collation, you must drop and recreate the collection.
Use collMod to modify compatible options: `db.runCommand({collMod: 'mycollection', validator: {email: {$type: 'string'}}, validationLevel: 'strict'})`. For collation, you must drop and recreate the collection.
中文步骤
使用 `db.getCollectionInfos({name: 'mycollection'})` 检查现有集合选项。如果选项可接受,直接使用现有集合而不修改。如果不行,重命名旧集合:`db.mycollection.renameCollection('mycollection_old')` 然后使用所需选项创建新集合:`db.createCollection('mycollection', {collation: {locale: 'en', strength: 2}, validator: {email: {$type: 'string'}}})`使用 collMod 修改兼容选项:`db.runCommand({collMod: 'mycollection', validator: {email: {$type: 'string'}}, validationLevel: 'strict'})`。对于排序规则,必须删除并重新创建集合。
Dead Ends
Common approaches that don't work:
-
Drop the collection and recreate it with the desired options
30% fail
Dropping the collection will delete all data permanently; this is irreversible unless you have a backup
-
Ignore the error and use the collection as-is
60% fail
If the existing collection has different options (e.g., missing a required validator), your application may behave incorrectly or fail to enforce data integrity
-
Use the collMod command to change options on the existing collection
50% fail
collMod can only modify certain options like validation rules and indexes, but cannot change fundamental options like collation or storage engine