Javascript 虚拟猫鼬
我尝试在我创建的两个模型之间使用虚拟填充: 在本例中,您可以使用巡演id获取所有评论,并在巡演中显示它们。 (使用query findById()仅显示此巡更时) 我的虚拟在模式中被设置为true(在使用虚拟填充后,我尝试将它们设置为true,但不起作用-通过这个) 在检查mongoose文档后,它似乎是正确的,但不起作用 我的模式:Javascript 虚拟猫鼬,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我尝试在我创建的两个模型之间使用虚拟填充: 在本例中,您可以使用巡演id获取所有评论,并在巡演中显示它们。 (使用query findById()仅显示此巡更时) 我的虚拟在模式中被设置为true(在使用虚拟填充后,我尝试将它们设置为true,但不起作用-通过这个) 在检查mongoose文档后,它似乎是正确的,但不起作用 我的模式: const tourSchema=new mongoose.Schema({ 姓名:{ 类型:字符串, 必需:[true,'巡更必须有名称'],//验证程序 独
const tourSchema=new mongoose.Schema({
姓名:{
类型:字符串,
必需:[true,'巡更必须有名称'],//验证程序
独一无二:没错,
特里姆:没错,
maxlength:[40,'巡更名称必须少于或等于40个字符'],
minlength:[10,'巡演名称必须至少包含10个字符']
//validate:[validator.isAlpha,'巡更名称只能包含字母字符']
},
等
等
等
//指南:数组---用户id的| |嵌入数组
指南:[
//引用用户数据模型,而不将指南保存在巡更数据模型中
//子引用
{
类型:mongoose.Schema.ObjectId,
参考:“用户”
}
]
},
{
//传递选项,将虚拟属性获取到文档/对象
toJSON:{virtuals:true},
toObject:{virtuals:true}
}
);
//定义虚拟属性
tourSchema.virtual('durationWeeks').get(函数(){
console.log('virtual1');
//使用函数声明=>使用此关键字
返回此文件。持续时间/7;
});
//虚拟填充
tourSchema.virtual('reviews'{
参考:“审查”,
localField:“\u id”,//查找“localField”所在的巡更`
foreignField:'tour',//等于'foreignField'`
//在查看中的tour字段中查找tour的_id
});代码>您需要将选项virtuals:true
传递到模式创建中:
const tourSchema = new mongoose.Schema({
...
}, {
virtuals: true
}
此外,我们使用mongoose lean virtuals
模块帮助实现.lean和virtuals。e、 g
const mongooseLeanVirtuals = require('mongoose-lean-virtuals');
...
tourSchema.plugin(mongooseLeanVirtuals);
tourSchema.set('toJSON', { virtuals: true });
tourSchema.set('toObject', { virtuals: true });
虽然我猜这并不是绝对必要的。您需要一个选项virtuals:true
传递到模式创建中:
const tourSchema = new mongoose.Schema({
...
}, {
virtuals: true
}
此外,我们使用mongoose lean virtuals
模块帮助实现.lean和virtuals。e、 g
const mongooseLeanVirtuals = require('mongoose-lean-virtuals');
...
tourSchema.plugin(mongooseLeanVirtuals);
tourSchema.set('toJSON', { virtuals: true });
tourSchema.set('toObject', { virtuals: true });
虽然我猜这并不是绝对必要的。所以我想出来了。
首先,我在github-mongoose回购中询问,并得到了回答:
reviewSchema.pre(/^find/, function (next) {
this.populate({
path: 'tour',
options: { select: 'name' } // <-- wrap `select` in `options` here...
}).populate({
path: 'user',
options: { select: 'name photo' } // <-- and here
});
next();
});
在tour模型中,我将外键从“tour_id”(正如我在其他问题中看到的那样)更改为“tour”)
现在,我的巡演数据中确实有评论,它确实通过id虚拟填充到巡演中,所以我找到了答案。
首先,我在github-mongoose回购中询问,并得到了回答:
reviewSchema.pre(/^find/, function (next) {
this.populate({
path: 'tour',
options: { select: 'name' } // <-- wrap `select` in `options` here...
}).populate({
path: 'user',
options: { select: 'name photo' } // <-- and here
});
next();
});
在tour模型中,我将外键从“tour_id”(正如我在其他问题中看到的那样)更改为“tour”)
现在,我的巡更数据中确实有评论,它确实通过id虚拟填充巡更嘿,这不起作用,在我的tourSchema中,正如您在定义模型后看到的那样,将virtuals设置为true。另外,我更新了问题并发布了JSON,我得到了回复。在reviewSchema中,我获得了tour的id,但在tour对象的arr中,我可能没有正确地填充以获得id?嘿,这不起作用,在我的tourSchema中,正如您在定义模型后看到的那样,将virtuals设置为true。另外,我更新了问题并发布了JSON,我得到了回复。在reviewSchema中,我获得了巡更的id,但是在巡更对象的arr中,我可能没有正确地填充以获得id?