2016-10-14 5 views
1

私のデータはRethinkDbで、このようなものになります。クライアントでHorizo​​nを使用してデータを「結合する」より良い方法はありますか?

[appointments] 
{ 
    id: 1, 
    date: "2016-01-01", 
    stylistId: 1, 
} 

[stylists] 
{ 
    id: 1, 
    name: "Sue", 
} 

を、私は約束をフェッチし、そのような予定のオブジェクトに埋め込まれてスタイリストを持つようにしたい:

{ 
    id: 1, 
    date: "2016-01-01", 
    stylist: { 
     id: 1, 
     name: "Sue", 
    } 
} 

私は達成することができます次のクエリを使用して近いもの:

return this.hz('appointments') 
    .find(appointmentId) 
    .fetch() 
    .toPromise() 
    .then(appointment => { 
    return this.hz('stylists').find(appointment.stylistId) 
     .fetch() 
     .toPromise() 
     .then(stylist => { 
     appointment.stylist = stylist; 
     return appointment; 
     }); 
    }) 
    .then(appointment => this.appointment = appointment); 

希望する結果を得るためのよりクリーンな方法があるのでしょうか。 RethinkDbは結合をサポートしていますが、Horizo​​nで公開されているようには見えません。私もRxJSにはあまりよくないので、参加がよりきれいにできるかどうか疑問に思っています。

答えて

2

は、私はそれをここに書き留めた

const appointmentFind$ = (appointmentId) => hz('appointments').find(appointmentId).fetch(); 
const stylistFind$ = (stylistId) => hz('stylists').find(stylistId).fetch(); 

appointmentFind$(appointmentId) 
    .mergeMap((appointment) => stylistFind$(appointment.stylistId) 
    .map((stylist) => ({ ...appointment, stylist }))) 
    .subscribe((x) => console.log(x)); 

mergeMapmap組み合わせてみてください、それはテストされていないのですが、それはこの

のように何らかの形で動作するはずです
関連する問題