FC2ブログ
 
■プロフィール

クリエイトウェーブスタッフ

Author:クリエイトウェーブスタッフ
開発における、諸々を書いていきたいなと思っています。

■最近の記事
■カテゴリー
■最近のコメント
■月別アーカイブ
■最近のトラックバック
■ブログ内検索

■RSSフィード
■リンク
cloud functionsでFireStore上の複数のドキュメントを読みこむ
あるコレクションに、ドキュメンとが複数あってscoreってフィールドに得点が、userIDってフィールド
にユーザーIDが並んでるとします。
仮にスコア100点の人をクエリで抽出して、抽出した該当userID使って、他の基本情報が書き込んである
コレクションからuserIDを使って、複数人のデータを抽出したい場合どうするんだと、ここ数日悩んで
おりました。
それこそ、10人だったり、100人だったりの可能性もある訳で・・・・

const ref = admin.fireStore.collection('コレクション名');
ref.where("score", "=", 100).get()
.then(querySnapshot => {
   for(let i= 0; i < querySnapshot.docs.length; i++)
   {
      const userId = querySnapshot.docs[i].data().userId;
      // ここでそれぞれDB読み込み?
   }
})
.catch(error => {
   console.log("DBの読み込みに失敗しました");
});

ってな感じで、async/await 使ったほうが良さそうとか思い デフォのV6エンジンだと使えないとかで
cloud functions上では、未だベータのNodeJSをV8エンジンにしてみたり
思考錯誤の連続・・・ 
でも、こういう場合の複数読み込みの命令はforeStoreに準備されてるようです。

その命令とは、
admin.fireStore.getAll

まず、クエリで、スコア100点の該当者を

ってな感じで書いておいて次の処理。
階層深くなると読みにくいので、私の場合、const me = this; で実行してるオブジェクトを参照させて
次のメソッドを呼び出してます。

jsは、こうでもしないとthisのスコープが、変化しまくるのでメソッドが特定出来ないので・・・・
me って変数は、DirectorのLingoで使ってた名残でなんとかく・・(懐かしい

次の処理は

という感じになります。

admin.fireStore.getAll が何故かマニュアルにも見当たらないし、英語音痴な私が海外のサイトとか
見てようやくここまでたどり着きました・・・数日かかった。

「...refArray」の「...」ってなに? と思ったらSpread構文というものらしい。知らなかった


カテゴリー:FireBase | TM(0) | CM(0)
コメントの投稿

管理者にだけ表示を許可する

FC2Ad