To convert a non-unique index to a unique index, use the collMod
command. The
collMod
command provides options to verify that your indexed field
contains unique values before you complete the conversion.
Before you Begin
1
Steps
1
Prepare the index to be converted to a unique index
Run collMod
on the type
field index and set
prepareUnique
to true
:
db.runCommand( {
collMod: "apples",
index: {
keyPattern: { type: 1 },
prepareUnique: true
}
} )
After prepareUnique
is set, you cannot insert new documents
that duplicate an index key entry. For example, the following
insert operation results in an error:
db.apples.insertOne( { type: "Delicious", quantity: 20 } )
MongoServerError: E11000 duplicate key error collection:
test.apples index: type_1 dup key: { type: "Delicious" }
2
Check for unique key violations
To see if there are any documents that violate the unique constraint on
the type
field, run collMod
with unique: true
and dryRun: true
:
db.runCommand( {
collMod: "apples",
index: {
keyPattern: { type: 1 },
unique: true
},
dryRun: true
} )
MongoServerError: Cannot convert the index to unique. Please resolve conflicting documents before running collMod again.
Violations: [
{
ids: [
ObjectId("660489d24cabd75abebadbd0"),
ObjectId("660489d24cabd75abebadbd2")
]
}
]
3
4