Java 对来自Firebase Firestore Android的数据执行添加/操作
我正在从Firestore检索数据,其中每个文档存储两个字段,一个是日期,另一个是秒。我希望对数据进行分组,以便将每个日期的秒数相加 例如,我有3个文档和2个日期相同但秒数不同的文档:Java 对来自Firebase Firestore Android的数据执行添加/操作,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我正在从Firestore检索数据,其中每个文档存储两个字段,一个是日期,另一个是秒。我希望对数据进行分组,以便将每个日期的秒数相加 例如,我有3个文档和2个日期相同但秒数不同的文档: date: 21-04-2019, timeTrained: 86 第二份文件: date: 21-04-2019, timeTrained: 24 date: 20-04-2019, timeTrained: 120 第三份文件: date: 21-04-2019, timeTrained: 24
date: 21-04-2019,
timeTrained: 86
第二份文件:
date: 21-04-2019,
timeTrained: 24
date: 20-04-2019,
timeTrained: 120
第三份文件:
date: 21-04-2019,
timeTrained: 24
date: 20-04-2019,
timeTrained: 120
因此,我想在第一个和第二个文档中添加timeTrained
,因为它们具有相同的日期,我的Firestore集合中会有许多类似的文档,因此我需要动态而不是硬编码
下图提供存储在Firestore中的数据快照
要解决此问题,请使用以下代码行:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference userExercisesRef = rootRef.collection("userExercises");
Query query = userExercisesRef.whereEqualTo("date", "21-04-2019");
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
long count = 0;
for (QueryDocumentSnapshot document : task.getResult()) {
long timeTrained = document.getLong("timeTrained");
count = count + timeTrained;
}
Log.d(TAG, String.valueOf(count));
}
}
});
要解决此问题,请使用以下代码行:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference userExercisesRef = rootRef.collection("userExercises");
Query query = userExercisesRef.whereEqualTo("date", "21-04-2019");
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
long count = 0;
for (QueryDocumentSnapshot document : task.getResult()) {
long timeTrained = document.getLong("timeTrained");
count = count + timeTrained;
}
Log.d(TAG, String.valueOf(count));
}
}
});
为了更好地理解,您需要计算所有
timeTrained
属性的值,其中date
是例如21-04-2019
,对吗?是,因为稍后将更新此属性以更好地理解,您想计算所有时间训练
属性的值,其中日期
为例如21-04-2019
,对吗?是,因为稍后会更新此属性。谢谢,我会尝试。所以,如果我想更新timeTrained值,我会传递count变量,对吗?不,如果你想更新timeTrained
值,你需要知道该属性的确切路径。Firebase没有SQL更新查询的概念。因此,在您的情况下,您需要首先读取要更新的节点,然后在其上循环,然后逐个或使用一个大型多位置更新语句进行更新。谢谢,我将尝试这样做。所以,如果我想更新timeTrained值,我会传递count变量,对吗?不,如果你想更新timeTrained
值,你需要知道该属性的确切路径。Firebase没有SQL更新查询的概念。因此,在您的情况下,您需要首先读取要更新的节点,然后在其上循环,然后逐个或使用一个大的多位置更新语句更新它们。