首页 > 解决方案 > 迭代firestore中的所有数据

问题描述

我正在制作一个 android 应用程序来平均 Firestore 中的所有评级数据。这是我的 Firestore 的结构。我想使用 DocumentSnapshot 检索 [1, 4, 5] 的所有 rating_num

reviews
|-my_document1
  |- rating_num:1
|-my_document2
  |- rating_num:4
|-my_document3
  |- rating_num:5

这是我到目前为止所做的:

Query query = FirebaseFirestore.getInstance().collection("reviews").whereEqualTo(rating_num,??) //no clue
        query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
              @Override
              public void onComplete(@NonNull Task<QuerySnapshot> task) {
                  Log.d("debug", "print all rating number using for loop");
                  for (QueryDocumentSnapshot document : task.getResult()) {
                      String cum_rating = document.getString("avg_quality");
                      Log.d("debug", cum_rating);
                  }
              }
          });

我不知道如何匹配我所有文档中唯一的 rating_num ,并且它在我的 for 循环中没有显示任何内容,任何帮助将不胜感激。

另请注意,无需调用 any .whereEqualTo(),因为您无需将任何属性与特定值匹配。

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


要从所有文档中获取属性值rating_num并创建平均值,请使用以下代码行:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference reviewsRef = rootRef.collection("reviews");
reviewsRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            long count = 0;
            for (QueryDocumentSnapshot document : task.getResult()) {
                count =+ document.getLong("rating_num");
            }
            long average = count / task.getResult().getDocuments().size();
            Log.d("TAG", "avarage: " + average);
        }
    }
});

如果您只有三个具有这三个值 1、4 和 5 的文档,则 logcat 中的结果将是:

3.33

推荐阅读