如何在同一模型的模式方法中创build模型实例?

学科。 我想在它init中创build一个新的模型实例静态方法:

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

我怎么能做到这一点?

你在正确的轨道上; this是架构在schema.statics方法中注册的模型,所以您的代码应该更改为:

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

Leonid正确地处理savecallback,即使它只是logging错误。

你几乎回答你的问题。 你的代码唯一的问题就是你现在没有注册模型。 但是您可以使用mongoose.model来dynamic获取它:

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

噢。 并考虑处理savecallback。 您不能确定save操作不会失败。