2012-12-24 20 views
14

Konu. Statik yöntemde init yeni bir model örneği istiyorum:Aynı modelin şema yönteminde bir model örneği nasıl oluşturabilirim?

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); 

Bunu nasıl yapabilirim?

+0

Yanıt için tnx. Ancak en doğru cevap şu olacaktır: 1. Modelin statik yöntemleri kullanmak için dinamik yükleme modelini kullanabiliriz. db.model ('Kişi'). countComments(); ' 2. Aynı modelin yeni örneğini oluşturmak için, sadece şunu kullanmalıyız: var varlık = new this; – Dmitry

cevap

1

Sorunuzu neredeyse cevapladınız. Kodunuzdaki tek sorun, bu noktada kayıtlı bir modelinizin olmamasıdır. Ama dinamik olarak almak için mongoose.model kullanabilirsiniz:

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. Ve save geri aramayı ele almayı düşünün. save işleminin başarısız olmayacağından emin olamazsınız.

26

Doğru yoldaydınız; this şema bir schema.statics yönteme içinde olarak kayıtlı Modeli, yani kodunuzu olarak değişmelidir:

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

Ve Leonid hatalar günlüğe yalnızca olsa bile save geri arama işleme konusunda haklı.

İlgili konular