はじめに
Firebase Firestore には、コレクションのドキュメント数を取得します。ただし、最近のアップデートと Firestore の新機能の導入により、これを実現するための複数のアプローチがあります。
New count() メソッド
10 月 20 日現在, 2022 年、Firestore は、実際のコンテンツを読まずにドキュメントをカウントできる新しい count() メソッドを提供します。クエリに一致するドキュメントをカウントするクエリを返します。 count() などの集計クエリの場合、クエリと一致する最大 1000 個のインデックス エントリのバッチごとに 1 つのドキュメントの読み取りに対して課金されます。
分散カウンター
オン2021 年 7 月 10 日、Firebase は Distributed Counter 拡張機能を導入しました。ビュー、いいね、シェアなどの高速アクションを追跡するアプリケーション向けに調整された、拡張性の高いカウンター サービスを提供します。この拡張機能を使用すると、1 秒あたり 1 回の書き込み操作の最大制限を克服できます。
ドキュメント数カウントのコード例
1. count() メソッドの使用
Query countQuery = db.collection("Posts") .whereEqualTo("status", "published"); Task<QuerySnapshot> task = countQuery.get(); task.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { if (task.isSuccessful()) { int count = task.getResult().size(); Log.d("TAG", count + ""); } else { Log.d(TAG, "Error getting documents: ", task.getException()); } } });
2.レガシー アプローチの使用
db.collection("Posts") .get() .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { if (task.isSuccessful()) { int count = 0; for (DocumentSnapshot document : task.getResult()) { count++; } Log.d("TAG", count + ""); } else { Log.d(TAG, "Error getting documents: ", task.getException()); } } });
その他の考慮事項
レガシー アプローチの制限:
レガシー アプローチの使用小規模なデータセットの場合はうまく機能しますが、大規模なデータセットの場合はドキュメントごとに読み取り操作が必要になるため、非効率的になる可能性があります。
分散カウンターの精度:
クラウド関数は書き込み時のベストエフォート。つまり、カウンターの更新にわずかな遅れが生じる可能性があり、特にデータセットが大きい場合や書き込み負荷が高い場合には、すぐには正確ではない可能性があります。
結論
新しい count() メソッドは、Firestore コレクション内のドキュメントをカウントする便利でパフォーマンスの高い方法を提供します。即時更新とスケーラビリティを備えたカウンターが必要な場合は、分散カウンター拡張機能の使用を検討してください。
以上がFirestore コレクション内のドキュメントを効率的にカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。