MongoDB + Mongoose:Unique: true未正常工作

8

我在我的node应用程序中有一个user.js模型,我希望用户名和其他一些字段是唯一的。在我的模型文件中,我已经正确地声明了下面所示的unique类型:

// User Schema
const UserSchema = new Schema({

    // PERSONAL USER INFO
    username: {
        type: String,
        required: true,
        index: true,
        unique: true,
    },
    email: {
        type: String,
        required: true,
        index: true,
        unique: true
    },
    password: {
        type: String,
        required: true,
    },
    ....
});

然而,在重启我的服务器和mongo会话后,我仍然可以使用相同的用户名和电子邮件创建用户。我可以从mongo shell和前端用户注册页面进行操作。

这里是否有我遗漏的第二部分?我不确定如何在此时正确地强制执行“unique”类型。谢谢!

2个回答

16

尝试删除数据库并重新运行程序,这可能是因为您在创建数据库后添加了约束条件,而mongoose没有重新创建索引。

如果您无法删除数据库,请在mongo控制台中尝试以下操作:

db.users.createIndex({username:1}, {unique:true})

查看更多信息请参见mongo唯一索引


1
我删除了我的数据库,然后创建了一些新用户,unique 类型起作用了,谢谢!如果用户尝试使用已经被使用的用户名注册账户,我该如何处理返回的错误? - jblew

3

如果您不想删除数据库,也可以重新索引它。

mongo <数据库名称> db.<集合名称>.reIndex()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接