0

ネストされたオブジェクトの配列を作成しようとしています。私は次のことをする本の例に従っています:

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

これは、1人の人に複数の電話番号を保存する場合に問題なく機能します。ただし、_idでPhoneオブジェクトを取得するための適切で高速な方法があるかどうかはわかりません。Phoneはマングースモデルではないため、Phone.findOne({...});に直接アクセスすることはできません。現在、私は_idで人を取得し、その人の電話をループして、idが一致するかどうかを確認することに固執しています。

それから私はこのリンクに出くわしました:http: //mongoosejs.com/docs/populate.html

片方がもう片方より正しいですか?現在、人を削除すると、その人の電話も消えます。'populate'で機能するかどうかはよくわかりませんが、PersonとPhonesを削除する必要があるようです。

誰かが違いを説明しようとしますか?

前もって感謝します

4

1 に答える 1

1

一般的なルールとして、電話を個別に照会する必要がある場合は、それらを別のコレクションに保持し、必要なときにpopulateそれらを検索するために使用するPeople必要があります。それ以外の場合は、更新と削除が簡単になるため、通常は埋め込みを選択することをお勧めします。

現在のように埋め込みアプローチを使用する場合、Mongoose配列は、要素をその値idでより簡単に検索するために使用できるメソッドを提供することに注意してください。_id

var phone = person.phones.id(id);
于 2013-03-04T22:56:28.833 に答える