2012-12-24 13 views
14

Oggetto. Voglio inizializzare una nuova istanza di modello nel suo metodo statico:Come posso creare un'istanza di modello nello stesso metodo dello schema del modello?

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

Come posso fare questo?

+0

Quindi, tnx per la risposta. Ma la risposta più corretta sarà quella: 1. Per usare i metodi statici del modello possiamo usare il modello di caricamento dinamico. 'db.model ('Person'). countComments();' 2. Per creare una nuova istanza dello stesso modello, è sufficiente usare 'var person = new this;' – Dmitry

risposta

1

Hai quasi risposto alla tua domanda. L'unico problema con il tuo codice è che non hai un modello registrato a questo punto. Ma è possibile utilizzare mongoose.model a prenderlo in modo dinamico:

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

Ow. E considerare la gestione della richiamata save. Non puoi essere sicuro che l'operazione save non avrà esito negativo.

26

Eri sulla buona strada; this è il modello lo schema è registrato come all'interno di un metodo schema.statics, in modo che il codice dovrebbe cambiare a:

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

e Leonid si trova proprio sulla gestione del save richiamata, anche se è solo per registrare gli errori.

Problemi correlati