我想检索由同一类型的多个mixin组成的完整对象。例如,建筑物mall
是office
,cantine
和store
的混合体。所有这些都存储在 buildings 集合中。
我有以下方案,其中属性mixins
是其他建筑物的数组:
BuildingSchema = mongoose.Schema
_id: String
mixins: [String]
title: String
attr1: []
attr2: []
attr3: []
Building = mongoose.Model "Building", BuildingSchema
是否可以(使用某种静态/实例方法或使用前/后挂钩)使用自己的数据检索和扩展/覆盖mixin对象以组成最终的Building实例?
答案 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
函数有助于最终的对象组合。最后返回一个新实例。