将 mixins 与 mongoose 结合使用

Use mixins with mongoose

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

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

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

Building = mongoose.Model "Building", BuildingSchema

是否有可能(使用某种 static/instance 方法或使用 pre/post 钩子)检索和 extend/overwrite 具有 own 构成最终建筑实例的数据?

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

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 函数有助于最终的对象组合。最后返回一个新的实例。