我可以设置超出枚举数组的值,我不知道为什么mongoose没有验证值,我是否以错误的方式更新枚举?
我的代码:
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);
})
}
状态枚举应该只有三个值:[&#39;已创建&#39;,&#39;已发货&#39;已确认&#39;] < / p>
但我能做到:
答案 0 :(得分:6)
版本4.0之前的Mongoose不支持对.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
和$unset
运算符字段的runValidators: true
中的验证。< / p>
所以你的更新将如下所示:
Order.update(
{ _id: orderId, shop: shopId },
{ $set: { status: status }},
{ upsert: true, runValidators: true }, function(err) {
console.log(err);
callback(err);
}