2015-02-10 87 views
0

我想检索一个由同一类型的多个mixin组成的完整对象。例如,建筑物malloffice,cantinestore的混合。所有这些都存储在收集建筑物使用mixins与猫鼬

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

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

Building = mongoose.Model "Building", BuildingSchema 

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

回答

0

我结束了创建一个呼吁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递归使混入的混入。 deepExtend函数有助于最终的对象组合。最后返回一个新的实例。