Как я могу создать экземпляр модели в том же методе схемы модели?
Subject. Я хочу, чтобы в качестве нового экземпляра модели использовался статический метод:
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);
Как я могу это сделать?
Ответы
Ответ 1
Ты был на правильном пути; this
- это модель, схема которой зарегистрирована как метод schema.statics
, поэтому ваш код должен измениться на:
Schema.statics.createInstance = function (name, pass) {
var newPerson = new this();
newPerson.name = name;
newPerson.pass = pass;
newPerson.save();
return newPerson;
}
И Леонид прав, обращаясь к обратному сообщению save
, даже если он только регистрирует ошибки.
Ответ 2
Ты почти ответил на свой вопрос. Единственная проблема с вашим кодом заключается в том, что на данный момент у вас нет зарегистрированной модели. Но вы можете использовать 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
не будет работать.