2017-04-05 51 views
0

我有一個名爲「門票」模式,其模式是:從外部收集到當前對象添加一個字段 - 貓鼬虛擬

var TicketItemSchema = new Schema({ 
    externalId: String, 
    price: Number, 
    quantity: { 
     type: Number, 
     default: 1 
    }, 
    comment: { 
     type: String, 
     default: '', 
     trim: true 
    } 
}); 

我想在我的「票創建一個名爲「實體」的新領域'對象,該對象應該自動添加並用實體集合中的對象填充。

但問題是:我想使用除mongod默認'id'以外的唯一字段。所以'填充'在這種情況下不起作用。

作爲一種變通方法,在模型類票的,我想是這樣的:

var Entity = mongoose.model('Entity').schema; 
... 
TicketItemSchema.virtual('entity').get(function() { 
    Entity.findOne({ 
     "externalId": this.externalId 
    }, function(err, entity) { 
     return entity; 
    }); 
}); 

但它不工作。那麼你對此有什麼想法?

回答

0

使用自定義字符串或ID填充是不可能的。作爲workaround,存在「虛擬」選項。

但虛擬只是synchronous setters/getters不提供異步調用的選項,這是你試圖在你的虛擬執行,它不工作。

相反,你可以定義和使用instance method

var Entity = mongoose.model('Entity').schema; 
... 

TicketItemSchema.methods{ 
    getEntity : function(cb){ 
     return Entity.findOne({"externalId": this.externalId }, cb); 
    } 
} 

並用它來獲得門票的實體:

ticket.getEntity(function(err, entity){ 
    //entity of the ticket object 
})