Mongoose子模式数组虚拟

时间:2014-10-12 18:28:06

标签: node.js mongoose

我发布这个问题和答案希望能帮助其他人(或者如果有更好的答案)。

如何以数组形式为Mongoose嵌套模式创建虚拟文件?

以下是架构:

var Variation = new Schema({
  label: {
    type: String
  }
});

var Product = new Schema({
  title: {
    type: String
  }

  variations: {
    type: [Variation]
  }
});

我希望虚拟variations。似乎如果子doc不是数组,那么我们可以简单地这样做:

Product.virtual('variations.name')...

但这只适用于非数组。

1 个答案:

答案 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]
  }
});