2016-09-23 2 views
0

У меня есть схемы, в которой поле баланса объявляется, как показано нижеМинимальная проверка не работает в Мангуста

balance: { 
    type: Number, 
    min: 0, 
    default: 30 
} 

Я поставил 0 в качестве минимального значения, так что баланс не будет отрицательным значением. Но когда я уменьшаю значение баланса через запрос на обновление, баланс оказывается отрицательным.

Мой запрос обновление:

User.update({ 
    _id: mongoose.Types.ObjectId(id) 
}, { 
    $inc: { 
     balance: -10 
    } 
}, function(error, result) { 
    // code 
}); 

ли я сделать какую-либо ошибку с кодом?

ответ

2

проверки Mongoose является внутренним промежуточным слоем, который не вызывается при обновлении; если вы хотите применить проверки при обновлении, вы должны найти документ, обновить атрибуты и сохранить его.

Например:

User.findById(id, function(err, result) { 
    if (err) return handleError(err); 
    user.balance = -10; 
    user.save(function(err) { 
    if (err) return handleError(err); 
    ... 
    }); 
}); 
4

По умолчанию mongoose не проверяет при вызове обновления, однако для этого есть опция. Смотрите документацию мангустов: http://mongoosejs.com/docs/validation.html (Update валидаторы)

var opts = { runValidators: true }; 
Toy.update({}, { color: 'bacon' }, opts, function (err) { 
    assert.equal(err.errors.color.message, 
    'Invalid color'); 
}); 
0

Включение проверки на обновление (отключенной по умолчанию) с помощью findByIdAndUpdate будет выглядеть следующим образом:

User.findByIdAndUpdate(id, { 
    $set: attributes, 
}, { 
    new: true, 
    runValidators: true, 
}) 
.then((user) => { 
    if (!user) { 
    // user not found 
    } 

    console.log(user); 
}) 
.catch(e => console.log(e)); 
Смежные вопросы