Как я могу создать экземпляр модели в том же методе схемы модели? - программирование

Как я могу создать экземпляр модели в том же методе схемы модели?

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

Как я могу это сделать?

4b9b3361

Ответ 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 не будет работать.