我有一个架构并指定login是唯一的。当我使用findByIdAndUpdate并传递查询$ set来更新用户对象时,当登录为dup时,它确实不返回错误。有谁知道为什么以及如何更新对象并强制进行架构验证?
谢谢!
// UserSchema.js
var schema = new Schema({
login: {
required: true,
unique: true
},
password: {
index: true,
type: String
}
});
// Update
UserSchema.findByIdAndUpdate('someID', { '$set': { login: 'abc' } }, function (error, user) {
callback(error, user);
});
答案 0 :(得分:2)
您只需将runValidators设置为true:
SELECT ID, CreateDate, KeyValue
FROM (
SELECT ID, CreateDate, KeyValue,
ROW_NUMBER() OVER (PARTITION BY KeyValue
ORDER BY CreateDate) AS rn
FROM capp.dbo.Log
WHERE Message = 'stat'
AND OldValue IS NULL
AND NewValue = 'O'
AND CreateDate >= '01/01/2016') AS t
WHERE t.rn = 1
答案 1 :(得分:1)
使用Mongoose中的速记辅助方法绕过验证,因此您需要使用3步法:
例如:
// 1: Find
UserSchema.findById( 'someID',
function (err, user) {
if(!err){
// 2: Edit
user.login = 'abc';
// 3: Save
user.save(function (err, user) {
if (err) {
console.log(err);
return;
}
console.log('User saved: ' + user);
});
}
}
);