http://mongoosejs.com/docs/populate.html에 따르면 개체를 가져올 때 ID가 아닌 개체에 ref 속성을 설정하면 ID가 아닌 개체를 가져와야합니다. 나는 페이지의이 부분을 말하는 겁니다 : 나는 t1.otherModel를 참조 할 때몽구스 참조가 ID로 변환되는 이유는 무엇입니까?
var T1schema = new mongoose.Schema({
otherModel:{type:mongoose.Schema.Types.ObjectId, ref:"T2"}
});
var T1 = mongoose.model('T1', T1schema);
var T2schema = new mongoose.Schema({
email: {type: String},
});
var T2 = mongoose.model('T2', T2schema);
var t1 = new T1();
var t2 = new T2({email:"[email protected]"});
t1.otherModel = t2;
지금, 그것은 단지 ObjectId가, 그리고이 아닌 T2 :
var guille = new Person({ name: 'Guillermo' });
guille.save(function (err) {
if (err) return handleError(err);
story._creator = guille;
console.log(story._creator.name);
// prints "Guillermo" in mongoose >= 3.6
// see https://github.com/LearnBoost/mongoose/wiki/3.6-release-notes
여기 내 예제 코드입니다. 예 :
console.log(t1.otherModel.email);
"[email protected]"대신 undefined가 인쇄됩니다. 어떤 아이디어? 참고 package.json에 따라 Mongoose 3.6.18을 사용하고 있습니다.
감사합니다.
감사합니다. 문서에서는 ref를 업데이트하면 id가 저장되지만 getter는 객체를 반환합니다. 개체를 저장 한 후에 만 작동한다는 것은 이상한 것 같습니다. – tkrein
Mongoose는 동기식 ref 할당 작업을 수행하지 않고 DB 쿼리를 만들어 개체를 가져 와서 메모리에 저장합니다. 어쨌든 콜백이 없습니다. 그것은 id를 모델로 변환하기 위해해야 할 일이고 mongoose는 비동기 함수 중 하나를 호출 할 때 DB IO 만 수행합니다. –
예제에서 데이터베이스가 전혀 개입되지 않았습니다. 나는 세트를 기대하고있다/재귀 될 수 있습니다. 객체가있는 ref 속성에 set을 호출하면 get이 방금 설정 한 값을 반환 할 것으로 예상합니다. 몽구스 문서에 따르면, 이것이 예상되는 행동입니다 (제가 인용 한 섹션에서).예제와 그 유일한 차이점은 DB에서로드 된 객체로 작업하고 있으며, 내 객체가 새로운 객체로 작업하고 있다는 것입니다. 특히 그들은 set _creator = guille을 호출하고 호출하는 다음 행은 _creator를 가져오고 ID가 아닌 객체를 가져옵니다. – tkrein