我可以设置超出枚举数组的值,但我不知道为什么猫鼬不验证该值,我是否以错误的方式更新枚举?
my code:
var OrderSchema = new mongoose.Schema({
status:{type:String,enum:['created','shipped','confirmed']},
)};
var changeOrderStatus = function(shopId,orderId,status,callback){
Order.update({_id:orderId,shop:shopId},{$set:{status:status}},{upsert:false},
function(err){
console.log(err);
callback(err);
})
}
The status枚举应该只对三个有价值:['created','shipped','confirmed']
但我可以这样做:
4.0 版本之前的 Mongoose 不支持对 Schema 静态方法进行验证,例如.update
, .findByIdAndUpdate
, .findOneAndUpdate
.
但它支持实例方法document.save()
因此,首先您需要找到订单,然后更改您想要的属性并致电.save()
。像这样:
Order.findOne({ _id: orderId, shop: shopId }, function(err, order) {
order.status = 'foo';
order.save(function(err, savedOrder) {
// ERROR HERE
})
})
如果您使用 Mongoose 4.0,它支持以下验证Schema.update
的领域$set
and $unset
运算符,当您包含runValidators: true
更新调用中的选项。
所以你的更新将如下所示:
Order.update(
{ _id: orderId, shop: shopId },
{ $set: { status: status }},
{ upsert: true, runValidators: true }, function(err) {
console.log(err);
callback(err);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)