java - 迭代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()
,因为您无需将任何属性与特定值匹配。
解决方案
要从所有文档中获取属性值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
推荐阅读
- c# - Slow Build Time on Brand New ASP.NET Core 2.1 Project
- batch-file - Hybrid Batch-VBS TTS script not working
- salesforce - 不允许使用 HTTP 方法“PATCH”。允许 POST、DELETE、GET、HEAD
- c++ - 使用 clang 编译 std::tuple 时遇到问题
- c# - 检测从 VSTO 插件运行的 VBA 宏
- android - kotlin - 相机在谷歌地图中不动
- javascript - 从 window.open 浏览器返回到 android 应用
- java - 改变可见性覆盖
- codeigniter - 如何在codeigintier中发送电子邮件?
- html - 显示网格 - 如何独立滚动侧边栏