我正在使用mongoDB shell with version 3.0.2
我正在尝试确保集合username
中users
字段的唯一性约束。
这就是我给的:
db.users.ensureIndex({"username": 1},{unique: true})
它给了我以下错误:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"errmsg" : "exception: E11000 duplicate key error index: mybackend.users.$username_1 dup key: { : \"rahat\" }",
"code" : 11000,
"ok" : 0
}
然后我在命令中使用dropDups: true
:
db.users.ensureIndex({"username": 1},{unique: true, dropDups: true})
然后我也得到同样的错误:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"errmsg" : "exception: E11000 duplicate key error index: mybackend.users.$username_1 dup key: { : \"rahat\" }",
"code" : 11000,
"ok" : 0
}
我也看到this SO link,但这里已有一个索引。我的没有。
db.users.getIndexes()
- >
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "mybackend.users"
}
]
我找了this issue on github并重新启动了mongo,但没有用。我究竟做错了什么?我想我犯了一个愚蠢的错误。请帮忙。
答案 0 :(得分:11)
自Mongo 3.0版以来,不再支持索引创建的drop duplicates功能。有关3.0版本,请参阅the compatibility changes page。
答案 1 :(得分:0)
从MongoDB 3.0开始,这不再是有效选项。
在MongoDB 3.0之前,MongoDB Unique + dupDrops的功能如http://dbversity.com/mongodb-dropdups-to-remove-duplicate-records/所示工作