Mongoose .update()不会触发验证检查

Yan*_* Li 4 mongoose

我可以设置超出枚举数组的值,我不知道为什么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);

    })
}
Run Code Online (Sandbox Code Playgroud)

状态枚举应该只有三个值:["创造","运","证实"]

但我能做到:

在此输入图像描述

Max*_*Max 7

4.0版本之前的猫鼬不支持架构像静态方法的验证.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
  })
})
Run Code Online (Sandbox Code Playgroud)

如果您使用Mongoose 4.0,则在更新调用中包含该选项时,它支持Schema.update$set$unset运算符字段进行验证runValidators: true.

所以你的更新将如下所示:

Order.update(
  { _id: orderId, shop: shopId },
  { $set: { status: status }},
  { upsert: true, runValidators: true }, function(err) {
    console.log(err);
    callback(err);
}
Run Code Online (Sandbox Code Playgroud)