将 mixins 与 mongoose 结合使用
Use mixins with mongoose
我想检索由多个相同类型的混合宏组成的完整对象。例如,建筑物 mall
是 office
、cantine
和 store
的混合。所有这些都存储在集合 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
函数有助于最终的对象组合。最后返回一个新的实例。
我想检索由多个相同类型的混合宏组成的完整对象。例如,建筑物 mall
是 office
、cantine
和 store
的混合。所有这些都存储在集合 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
函数有助于最终的对象组合。最后返回一个新的实例。