私は次の構造を持つクラウドFirestore DBを持っている:Cloud Firestoreクエリで複数のドキュメントを結合するにはどうすればよいですか?
- ユーザー
- [UID]
- 名: "テストユーザー"
- [UID]
- 投稿
- [id]
- 内容:「ちょっとテストポスト」。
- タイムスタンプ:(2017年12月22日)
- UID:[UID]
- [id]
実際のDBに存在するより多くのデータがあるが、上記は単なるコレクション/文書を示します/フィールド構造。
私は、私が投稿を表示している投稿者の名前を表示したいWebアプリケーションのビューを持っています。私は記事をフェッチするには、以下のクエリを使用しています:
let loadedPosts = {};
posts = db.collection('posts')
.orderBy('timestamp', 'desc')
.limit(3);
posts.get()
.then((docSnaps) => {
const postDocs = docSnaps.docs;
for (let i in postDocs) {
loadedPosts[postDocs[i].id] = postDocs[i].data();
}
});
// Render loadedPosts later
私は何をしたいが、ポストのuidフィールドに格納されているUIDでユーザーオブジェクトを照会し、対応するloadedPostsオブジェクトにユーザーの名前のフィールドを追加しています。一度に1つのポストしか読み込んでいなかった場合は、問題はありません。オブジェクトが返ってくるのを待ってから、.then()
関数で別のクエリをユーザ文書に作成します。
しかし、私は一度に複数の投稿文書を取得しているため、正しい投稿を.get()
の各投稿のuser/[uid]
文書で呼び出すと、正しいユーザーを正しい投稿にマップする方法がわかりません。
誰もがこの問題に対して洗練されたソリューションを考えることはできますか?
4の代わりに2つのコール、nice! – saricden
これは、最後の3つの投稿を作成したユーザーだけでなく、すべての*ユーザーを読み込みます。これは開発中にうまくいくかもしれませんが、ユーザーを増やすと不必要なデータがますます読み込まれるようになります。 –