2015-02-10 105 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函數有助於最終的對象組合。最後返回一個新的實例。