В упражнении для обучения failed try, чтобы заставить валидаторы работать с 'document.update', я наткнулся на то, что я не понимаю.
Теперь я знаю, что это не сработает, но одна из вещей, которые я пробовал, заключалась в настройке моих параметров: {runValidators: true, context: 'query'}. В моей функции проверки достоверности я попробовал console.logging(this), с контекстом и без него: опция "запрос".
Не было никакой разницы. Я получил большой объект (это называется "объектом запроса"?) Это похоже на то, что я читал здесь.
В вышеописанной функции проверки цвета это означает, что документ проверяется при использовании проверки документа. Однако при запуске проверки обновлений обновляемый документ может быть не в памяти сервера, поэтому по умолчанию это значение не определено.
Это не было undefined, даже без контекстного параметра.
Я даже попытался сделать его функцией стрелки, чтобы увидеть, было ли в лексике это другое. В этом случае это было undefined, но опять же изменение параметра контекста не помогло. (Я все еще участвую, поэтому я не знаю, важна ли эта часть).
в модели:
let Property = mongoose.model('Property', {
name: {type:String, required:true},
occupancy: {type:String},
maxTenants: Number,
tenants: [{ type:mongoose.Schema.Types.ObjectId, ref: 'Tenant', validate: [checkMaxTenants, "Maximum tenants exceeded for this property. Tenant not added."]}]
});
function checkMaxTenants(val){
console.log("this",this);
// return this.tenants.length <= this.maxTenants;
return true;
}
и на маршруте:
property.update({$set: {tenants:property.tenants}},{new:true,runValidators:true,context:'query'}, function(err,savedProperty){
Все, что поможет мне лучше понять несоответствие между тем, что я думаю, что я читаю, и то, что я вижу, было бы здорово!