前提・実現したいこと
Firestoreでコレクションの要素数をカウントする方法
こちらのページの3つ目のやり方(データ数が多いコレクションのカウント方法)を参考にしながら、コレクションの要素数をカウントすることに成功しました。
しかし、これだと今までのデータがカウントされません。
例えば、users/{userId}/events/
以下のコレクションに、すでに50件のドキュメントがあったとします。
新たにevent(events以下に生成される{eventId}
)が追加されても、カウントは「51」では無く、「1」となります。
元のデータも含めてカウントを開始するには、どうすればよいでしょうか?
該当のソースコード
typescript
1import * as functions from 'firebase-functions'; 2import * as admin from 'firebase-admin'; 3admin.initializeApp(); 4const db = admin.firestore(); 5 6exports.countEvents = functions.firestore 7 .document('users/{userId}/events/{eventId}') 8 .onWrite((change, context) => { 9 10 const userId = context.params.userId; 11 const FieldValue = admin.firestore.FieldValue; 12 const countsRef = db.collection('users').doc(userId); 13 14 if (!change.before.exists) { 15 // 登録時に件数をインクリメント 16 return countsRef.update({ eventCount: FieldValue.increment(1) }); 17 } else if (change.before.exists && !change.after.exists) { 18 // 削除時に件数をデクリメント 19 return countsRef.update({ eventCount: FieldValue.increment(-1) }); 20 } 21 return; 22 });
補足情報(FW/ツールのバージョンなど)
Firestoreの構造は以下のようになり、userId
のフィールドにeventCount
があります。
users/{userId}/events/{eventId}

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2020/04/21 04:21