MongoDB + Mongoose:独特:真正无法正常工作[重复]

Posted

技术标签:

【中文标题】MongoDB + Mongoose:独特:真正无法正常工作[重复]【英文标题】:MongoDB + Mongoose: Unique: true not working properly [duplicate] 【发布时间】:2018-07-29 03:33:55 【问题描述】:

我的节点应用程序中有一个 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 类型。谢谢!

【问题讨论】:

【参考方案1】:

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

mongo <db-name> db.<collection-name>.reIndex()

【讨论】:

【参考方案2】:

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

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

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

更多信息请参见mongo unique index

【讨论】:

我删除了我的数据库,然后创建了一些新用户,unique 类型工作了,谢谢!如果用户尝试使用已在使用的用户名创建帐户,我应该如何处理返回的错误?

以上是关于MongoDB + Mongoose:独特:真正无法正常工作[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Mongo基础使用,以及在Express项目中使用Mongoose

Mongoose 独特和自定义验证

如何在不选择模式配置参数的情况下使用 mongoose 在 MongoDB 模式实例化中的关联数组/对象中执行 foreach?

填充嵌套数组的无引用对象

MongoDB - 一个集合中的各种文档类型

关于NodeJs为啥要用mongoose操作mongodb