2013-03-04 2 views
0

중첩 된 객체의 배열을 만들려고합니다. 나는 다음과 같은 작업을 수행 책에서 예를 다음입니다 : 사람에 대해 여러 전화 번호의 년대를 저장할 때 잘 작동mongo에서 중첩 된 객체를 만드는 올바른 방법

 // Creates the Schema for the Features object (mimics ESRI) 
     var Phone = new Schema({ 
      number: { type: Number, required: false }, 
      ... 
      personId: {type: Schema.Types.ObjectId} 
     } 
    ); 

     // Creates the Schema for the Attachments object 
     var Person = new Schema({ 
     name: { type: String }, 
     phones: [Phone] 
     } 
    ); 

    var Person = mongoose.model('Person', Person); 

합니다. 그러나 _id에 의해 Phone 객체를 얻는 좋은/빠른 방법이 있는지 확실하지 않습니다. Phone은 몽구스 모델이 아니므로 Phone.findOne ({...})에 직접 갈 수는 없습니다. 지금 나는 _id의 사람을 얻고 그 사람의 전화를 반복하고 id가 일치하는지 확인해야한다. http://mongoosejs.com/docs/populate.html

이 다른 여러 방법이 더 잘된다

은 그 때 나는이 링크 우연히? 현재 사람을 삭제하면 휴대 전화도 사라집니다. Person과 Phones를 삭제해야하는 것처럼 'populate'로 작동하는지 확실치 않습니다.

누구나 차이점을 설명하려고합니까? 사전

답변

1

일반적인 규칙에

감사는 독립적으로 전화를 조회해야하는 경우에, 당신은 분리 수거에 보관하고 필요할 때 People에서 그들을 찾기 위해 populate를 사용한다는 것입니다. 그렇지 않으면 일반적으로 업데이트 및 삭제를 단순화하기 때문에 이러한 파일을 포함시키는 것이 더 나은 선택입니다.

지금처럼 임베디드 방식을 사용하는 경우 Mongoose 배열은 값으로 요소를보다 쉽게 ​​찾을 수있는 id 메서드를 제공합니다.

var phone = person.phones.id(id); 
+0

완벽한 설명, 감사합니다. – lostintranslation

관련 문제