2012-12-24 2 views
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); 

내가 어떻게 할 수 있습니까?

+0

그래서 응답을 위해 tnx. 하지만 가장 정확한 대답은 다음과 같습니다. 1. 모델의 정적 방법을 사용하기 위해 동적 로딩 모델을 사용할 수 있습니다. db.model ('Person'). countComments();' 2. 동일한 모델의 새 인스턴스를 만들려면'var person = new this; – Dmitry

답변

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 작업이 실패하지 않는다는 것을 확신 할 수 없습니다.

26

올바른 길을 가고있었습니다. this 스키마가 schema.statics 메소드 내로 등록 된 모델입니다, 그래서 당신의 코드를 변경해야합니다

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

과 레오 니드가 오류 로그 만의 경우에도 save 콜백 처리에 대한 권리입니다.

관련 문제