使用带有猫鼬的mixins

时间:2015-02-10 14:25:37

标签: mongoose

我想检索由同一类型的多个mixin组成的完整对象。例如,建筑物mallofficecantinestore的混合体。所有这些都存储在 buildings 集合中。

我有以下方案,其中属性mixins是其他建筑物的数组:

BuildingSchema = mongoose.Schema
    _id:    String
    mixins: [String]
    title:  String
    attr1:  []
    attr2:  []
    attr3:  []

Building = mongoose.Model "Building", BuildingSchema

是否可以(使用某种静态/实例方法或使用前/后挂钩)使用自己的数据检索和扩展/覆盖mixin对象以组成最终的Building实例?

1 个答案:

答案 0 :(得分:0)

我最终在retrieve模型上创建了一个名为Building的静态方法,如下所示:

BuildingSchema.static "retrieve", (id, cb) ->
  @
    .findOne _id: id
    .exec (error, building) =>
      return cb error if error

      building = building.toJSON()
      mixins   = building.mixins or []

      async.reduce mixins, building, ((obj, id, cb) =>
        @retrieve id, (error, building) ->
          return cb error if error

          building = building.toJSON()
          building = deepExtend building, obj

          cb null, building

      ), (error, building) ->
        return cb error if error

        cb null, new Building building

这里,我基本上是递归调用函数retrieve来启用mixins的mixins。 deepExtend函数有助于最终的对象组合。最后返回一个新实例。