投稿日:2018-12-25 Tue
あるコレクションに、ドキュメンとが複数あって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構文というものらしい。知らなかった
△ PAGE UP