var schema = new Schema({
_id: Schema.ObjectId,
email: {type: String, required: true}
});
以前email
字段是唯一的(具有唯一约束)
现在我删除了唯一约束,然后它也给出了唯一的验证错误。我已经重新启动了mongo然后它也抛出了错误。
有什么想法吗?
答案 0 :(得分:6)
当您删除架构定义中的唯一约束时,您也应该手动将其从数据库中删除。您可以使用 dropIndex()
方法在mongo shell中执行此操作,也可以使用本机node.js驱动程序的 dropIndex()
方法在您的应用程序中执行此操作集合。
您可能需要先检查数据库中当前的索引来确认;您很可能会在Mongoose中定义架构后填充集合时创建的电子邮件唯一索引。
您可以在mongo shell中发出命令,假设您的数据库中有一个名为users
的集合,名为test
:
> db.users.getIndexes()
将显示当前索引,您可以在控制台中看到如下数组:
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.users"
},
{
"v" : 1,
"unique" : true,
"key" : {
"email" : 1
},
"name" : "email_1",
"ns" : "test.users",
"background" : true,
"safe" : null
}
]
对于应用程序代码中的解决方案,假设您有一个名为User
的Mongoose模型,该模型具有上面定义的模式,您可以调用 getIndexes()
本机node.js司机的收集方法:
User.collection.getIndexes(function (err, results) {
// Handle errors
});
在mongo shell中,您可以继续使用 dropIndex()
方法删除电子邮件索引:
> db.users.dropIndex("email_1")
在您的应用程序代码中,您还可以通过Mongoose模型为集合发出命令,并调用本机node.js驱动程序的 dropIndex()
集合方法:
User.collection.dropIndex("email_1", function (err, results) {
// Handle errors
});
答案 1 :(得分:0)
您也可以按照以下步骤操作。