MongoDB DuplicateKeyException
MongoDB DuplicateKeyException
WriteConcern detected an error 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: develop.Test.$AppId_1_UserId_1_Type_1__sub_1__key_1 dup key: { ... }'. (Response was { "ok" : 1, "code" : 11000, "err" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: develop.Test.$AppId_1_UserId_1_Type_1__sub_1__key_1 dup key: {...}).
我在尝试向 collection 中插入新条目时遇到上述错误。让我困惑的是我的关键是一个 Guid id 字段。该实体有 AppId 和 UserId 字段,但这些字段不应该是键,也不应该是唯一的。
就在我保存之前,Id 只是全零。设置为唯一的 Guid 后,保存调用会抛出 MongoDuplicateKey 错误。
也许是因为我是 Mongo 的新手,但我不明白这一点,我们将不胜感激。
更新
获取索引的输出
{
"0" : {
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "develop.Test"
},
"1" : {
"v" : 1,
"unique" : true,
"key" : {
"AppId" : 1,
"UserId" : 1,
"Type" : 1,
"_sub" : 1,
"_key" : 1
},
"name" : "AppId_1_UserId_1_Type_1__sub_1__key_1",
"ns" : "develop.Test"
},
"2" : {
"v" : 1,
"key" : {
"Type" : 1,
"_sub" : 1,
"_g" : 1
},
"name" : "Type_1__sub_1__g_1",
"ns" : "develop.Test"
}
}
您在 AppId
、UserId
、Type
、sub
和 key
字段上有一个 unique compound indexes,这就是您收到此错误。
"1" : {
"v" : 1,
"unique" : true,
"key" : {
"AppId" : 1,
"UserId" : 1,
"Type" : 1,
"_sub" : 1,
"_key" : 1
},
"name" : "AppId_1_UserId_1_Type_1__sub_1__key_1",
"ns" : "develop.Test"
},
现在怎么解决这个问题?
- 如果不是您创建的,那么也许是您的同事或其他人创建的。在这种情况下,你不会在不与他们交谈的情况下删除索引。
您可能希望使用 db.collection.dropIndex(index)
方法删除索引
db.collection.dropIndex({ AppId: 1, UserId: 1, Type: 1, _sub: 1, _key: 1 })
WriteConcern detected an error 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: develop.Test.$AppId_1_UserId_1_Type_1__sub_1__key_1 dup key: { ... }'. (Response was { "ok" : 1, "code" : 11000, "err" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: develop.Test.$AppId_1_UserId_1_Type_1__sub_1__key_1 dup key: {...}).
我在尝试向 collection 中插入新条目时遇到上述错误。让我困惑的是我的关键是一个 Guid id 字段。该实体有 AppId 和 UserId 字段,但这些字段不应该是键,也不应该是唯一的。
就在我保存之前,Id 只是全零。设置为唯一的 Guid 后,保存调用会抛出 MongoDuplicateKey 错误。 也许是因为我是 Mongo 的新手,但我不明白这一点,我们将不胜感激。
更新
获取索引的输出
{
"0" : {
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "develop.Test"
},
"1" : {
"v" : 1,
"unique" : true,
"key" : {
"AppId" : 1,
"UserId" : 1,
"Type" : 1,
"_sub" : 1,
"_key" : 1
},
"name" : "AppId_1_UserId_1_Type_1__sub_1__key_1",
"ns" : "develop.Test"
},
"2" : {
"v" : 1,
"key" : {
"Type" : 1,
"_sub" : 1,
"_g" : 1
},
"name" : "Type_1__sub_1__g_1",
"ns" : "develop.Test"
}
}
您在 AppId
、UserId
、Type
、sub
和 key
字段上有一个 unique compound indexes,这就是您收到此错误。
"1" : {
"v" : 1,
"unique" : true,
"key" : {
"AppId" : 1,
"UserId" : 1,
"Type" : 1,
"_sub" : 1,
"_key" : 1
},
"name" : "AppId_1_UserId_1_Type_1__sub_1__key_1",
"ns" : "develop.Test"
},
现在怎么解决这个问题?
- 如果不是您创建的,那么也许是您的同事或其他人创建的。在这种情况下,你不会在不与他们交谈的情况下删除索引。
您可能希望使用
db.collection.dropIndex(index)
方法删除索引db.collection.dropIndex({ AppId: 1, UserId: 1, Type: 1, _sub: 1, _key: 1 })