Выполнить добавление / операцию с данными из Firebase Firestore Android

1

Я получаю данные из 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.

Изображение 174551

Теги:
firebase
android-studio
google-cloud-firestore

1 ответ

0

Чтобы решить эту проблему, используйте следующие строки кода:

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
  • 0
    Спасибо, я попробую это. Так что, если бы я хотел обновить значение timeTrained, я бы просто передал его переменной count, верно?
  • 0
    Нет, если вы хотите обновить значение timeTrained , вам нужно знать точный путь к этому свойству. Firebase не имеет понятия запросов на обновление SQL. Так что в вашем случае вам сначала нужно прочитать узлы, которые вы хотите обновить, затем зациклить их, а затем обновить их один за другим или с помощью одного большого оператора многократного обновления.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню