2013-03-04 82 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.findOne({...});現在我堅持通過_id獲得一個人,然後循環播放這些人的電話並查看該ID是否匹配。

然後,我偶然發現了這個鏈接: http://mongoosejs.com/docs/populate.html

是一種方法比另一種更正確?目前,當我刪除一個人時,他/她的手機也會消失。不太確定這是否適用於'填充',好像我需要刪除個人和電話。

任何人都想試圖解釋這些差異嗎?

在此先感謝

回答

1

一般的規則是,如果你需要獨立查詢電話,那麼你就應該讓他們在一個單獨的收集和使用populate需要的時候從People找一找。否則,嵌入它們通常是更好的選擇,因爲它簡化了更新和刪除操作。

當使用像您這樣的嵌入式方法時,請注意,Mongoose數組提供了一個id方法,您可以使用該方法通過其值_id更容易地查找元素。

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

完美的解釋,非常感謝! – lostintranslation 2013-03-05 14:45:37