2012-12-24 81 views
14

標題。我想init初始化一個新的模型實例靜態方法:如何在同一模型的模式方法中創建模型實例?

var Schema = new mongoose.Schema({...}); 

//... 

Schema.statics.createInstance = function (name, pass) { 
    var newPerson = new Person; // <--- or 'this', or 'Schema'? 
    newPerson.name = name; 
    newPerson.pass = pass; 
    newPerson.save(); 
    return newPerson; 
} 

// ... 

module.exports = db.model("Person", Schema); 

我該怎麼做?

+0

所以,tnx的響應。但最正確的答案將是: 1.對於使用模型的靜態方法,我們可以使用動態加載模型。 'db.model('Person')。countComments();' 2.爲了創建同一模型的新實例,我們只需要使用'var person = new this;' – Dmitry

回答

1

你幾乎回答了你的問題。你的代碼唯一的問題是你現在沒有註冊模型。但您可以使用mongoose.model來動態獲取它:

Schema.statics.createInstance = function (name, pass) { 
    var newPerson = new db.model('Person'); // <- Fetch model "on the fly" 
    newPerson.name = name; 
    newPerson.pass = pass; 
    newPerson.save(); 
    return newPerson; 
} 

Ow。並考慮處理save回調。您不能確定save操作不會失敗。

26

你在正確的軌道上; this是模式註冊爲schema.statics方法中的模式,使你的代碼更改爲:

Schema.statics.createInstance = function (name, pass) { 
    var newPerson = new this(); 
    newPerson.name = name; 
    newPerson.pass = pass; 
    newPerson.save(); 
    return newPerson; 
} 

而且獅子座是正確的有關處理save回調,哪怕它只是記錄錯誤。

相關問題