我正在使用save
方法保存和更新。对于我的注册页面,我有一个方法pre("save")
,用于检查用户是否已经存在。
因此我不能再使用save来更新了。
我目前的方法是检查对象的某些属性是否已更改(无法在注册页面中设置的属性),如果是,我可以“欺骗”跳过pre("save")
方法。但这绝不是干净的。如果我想更改用户名(例如可以从注册页面访问),我就无法做到。
我想出了这个,而不是在pre("save")
方法中进行过滤:
user.save(function(error){
if( error.name != "UserAlreadyExistError")
答案 0 :(得分:0)
我找到了解决方案:
当我这样做时:
var user = new UserModel();
user.save()
Mongoose将检查是否存在具有给定_id
的用户,如果是,则会抛出重复的密钥错误。
但是,当用findOne()
方法检索用户并保存然后时,它不会抛出任何重复键错误,就好像mongoose知道它是有意更新一样。
另请注意,字段_id
必须完全这样调用。