mongoose 怎么让字段唯一
发布于 12 年前 作者 ruandao 26657 次浏览 最后一次编辑是 8 年前

如题

我弄这样,不过貌似一直出错

var UserSchema = new Schema({ username: { type:String, unique: true }, email: { type: String, unique: true}, password: { type: String, set: encrypt } });

一直出现下面的错误 { [MongoError: E11000 duplicate key error index: test.users.$ dup key

15 回复

#怎么在数据库里面设置让某个字段的值必须唯一啊??

你说的是关键key?

我是想,就像上面设置username 和 email 都必须是唯一的 但是按照上面的设置,一直会出现e11000错误

现在我是通过pre(‘save’,function…)做处理了,不过还是想知道在 mongoose中怎样设置才可以让某个字段唯一 unique 的话,我看这个mongodb.org上的资料 貌似可以,但是我一放两个字段分别加unique:true的话就会出现E11000的错误,而且我删了数据库重新运行还是不行(可以确保没有null值出现

不是关键key 只是想设置字段唯一

@ruandao 你的数据库里面已经有重复的数据了。把数据删除掉,试试看。

@darklowly 恩,抱歉 ,确实是已经有重复数据了,试的时候没弄 好

@ruandao 你那个模式设计得有问题,密码不要这么做。不然以后你比较密码还是要单独写。

@darklowly 我用的是bcrypt 到时後 直接 bcrypt.comparre(input_password, user.password) 就可以了

@darklowly 我是觉得直接写在model里面 要修改密码只要 user.password = new_input_password user.save(…) 下 而且比较密码也不复杂

:) 已经解决了,是疏忽了, 还是用unique: true

@ruandao 这样可以实现,但是代码不对称。

@darklowly

我比较密码是写在 UserSchema.statics.auth(email, password, cb) 中的

@ruandao 恩,这样代码比较对称.我也就是这个意思。不管是放在数据库层,还是普通的“代码层”,都可以,但是不能一边放一个。

其实就是让自己统一一点…不要找不到代码了

回到顶部