2017-09-01 9 views
3

言って、私はManagerスキーマがあります。マングース複数深いを移入

{ 
    name: { type: String }, 
    clients: [{ type: Mongoose.Schema.ObjectId, ref: 'Client'}] 
} 

をそして、私がClientスキーマがあります(同様

{ 
    name : { type String }, 
    cars : [{ type: Mongoose.Schema.ObjectId, ref: 'Car' }], 
    houses: [{ type: Mongoose.Schema.ObjectId, ref: 'House' }] 
} 

そしてCarHouseをその構造は、問題のために重要ではありません1つの.populate()の複数フィールドに複数のClientのフィールドを深く入力するにはどうすればよいですか?

Manager.find() 
    .populate({ 
     path: 'users', 
     populate: { path: 'cars' }, 
     populate: { path: 'houses' } 
    }); 

をし、それが働いていた場合(私は以前.populate()メソッドに渡されたpopulateキーを宣言上書きされる)、それは本当に私を驚かせるでしょう:何が私が試してみました。私の例では、明らかにユーザーあたりのフィールドがhousesになっています。正直なところ、いいえ、何もdocsにはありません。サポートされていますか?私はそれが私の例に基づいて '浅い'人口のためであることを知っています:

User.populate('cars') 
    .populate('houses') 

深いのはどうですか?

+1

確かにそれはちょうど 'Users.populate({パスです: 'ユーザー'、移入:{パス:「車住宅 '}}) '。現行レベルのパスのスペース区切りリストとして '' cars houses ''を使用しています。少なくとも、それは単一のレベルに当てはまるので、それは確かに他のものにとって同じでなければならない。 –

+0

ありがとうございました。ドキュメントの説明を見落としましたか? – wscourge

+1

スペースで区切られたリストは、ドキュメントの先頭のどこかに記載されています。これは、あなたが言及した '.populate()。populate()'に取って代わるものです。 –

答えて

0

1)が移入される特性を有するオブジェクトの配列を渡す:

Manager.find() 
    .populate({ 
     path : 'users', 
     populate: [ 
      { path: 'cars' }, 
      { path: 'houses' } 
     ] 
    }); 

この溶液をその完全な程度に深い移入を使用することを可能にします。考えてみましょう:

Manager.find() 
    .populate({ 
     path : 'users', 
     populate: [ 
      { path: 'cars' }, 
      { 
       path : 'houses', 
       populate: { 
        path : 'rooms', 
        populate: 'windows' 
       } 
      } 
     ] 
    }); 

2)移入するためのスペース区切りのコレクションのパス文字列を:

Manager.find() 
    .populate({ 
     path : 'users', 
     populate: 'cars houses' 
    }); 
関連する問題