Я получаю данные из Firestore, где каждый документ хранит 2 поля, одно из которых является датой, а другое - секундами. Я хочу сгруппировать данные так, чтобы секунды складывались для каждой даты.
Например, у меня есть 3 документа и 2 с одинаковыми датами, но разными секундами:
date: 21-04-2019,
timeTrained: 86
2-й документ:
date: 21-04-2019,
timeTrained: 24
3-й документ:
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));
}
}
});
Согласно предоставленным вами данным, за 21-04-2019
результат в вашей logcat будет:
110
timeTrained
, вам нужно знать точный путь к этому свойству. Firebase не имеет понятия запросов на обновление SQL. Так что в вашем случае вам сначала нужно прочитать узлы, которые вы хотите обновить, затем зациклить их, а затем обновить их один за другим или с помощью одного большого оператора многократного обновления.