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

saveまた、エラーをログに記録するためだけであっても、Leonid はコールバックの処理については正しいです。

于 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 に答える