我发布这个问题和答案希望能帮助其他人(或者如果有更好的答案)。
如何以数组形式为Mongoose嵌套模式创建虚拟文件?
以下是架构:
var Variation = new Schema({
label: {
type: String
}
});
var Product = new Schema({
title: {
type: String
}
variations: {
type: [Variation]
}
});
我希望虚拟variations
。似乎如果子doc不是数组,那么我们可以简单地这样做:
Product.virtual('variations.name')...
但这只适用于非数组。
答案 0 :(得分:5)
关键是将虚拟定义为子模式的一部分而不是父模式,并且必须在将子模式分配给父模式之前完成。可以通过this.parent()
:
var Variation = new Schema({
label: {
type: String
}
});
// Virtual must be defined before the subschema is assigned to parent schema
Variation.virtual("name").get(function() {
// Parent is accessible
var parent = this.parent();
return parent.title + ' ' + this.label;
});
var Product = new Schema({
title: {
type: String
}
variations: {
type: [Variation]
}
});