【发布时间】:2016-11-02 04:44:33
【问题描述】:
在失败的尝试让验证器使用“document.update”的学习练习中,我遇到了一些我不明白的东西。
我现在知道它不起作用,但我尝试的其中一件事是将我的选项设置为 {runValidators:true, context:'query'}。在我的验证器函数中,我尝试了 console.logging (this),有和没有 context:"query" 选项。
没有区别。我收到了一个大对象(这是否称为“查询对象”?)这似乎与我阅读的 here 背道而驰。
在上面的颜色验证功能中,这是指使用文档验证时正在验证的文档。但是,在运行更新验证器时,正在更新的文档可能不在服务器的内存中,因此默认情况下 this 的值没有定义。
它不是 undefined ,即使没有上下文选项。
我什至尝试将其设为箭头函数,以查看词汇 this 是否有任何不同。在这种情况下,这个 是未定义的,但同样,更改上下文选项并没有什么不同。 (我还在学习,所以我不知道那部分是否相关)。
在模型中:
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){
任何能帮助我更好地理解我认为我正在阅读的内容与我看到的内容之间的差异的东西都会很棒!
【问题讨论】:
标签: javascript node.js mongodb validation mongoose