14

主题。我想在它的静态方法中初始化一个新的模型实例:

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

我怎么能做到这一点?

4

2 回答 2

28

你走在正确的轨道上;this是模式在schema.statics方法中注册的模型,因此您的代码应更改为:

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

Leonid 在处理save回调方面是正确的,即使它只是记录错误。

于 2012-12-24T15:57:38.300 回答
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;
}

哦。并考虑处理save回调。您不能确定该save操作不会失败。

于 2012-12-24T08:17:04.117 回答