Как получить детские ключи от Firebase, не загружая их детей? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть база данных Firebase с узлом "items", который имеет много дочерних элементов, и я хотел бы импортировать список дочерних ключей. Поскольку каждый дочерний элемент содержит достаточно данных, которые мне не нужны для этой цели, я хотел бы загрузить только дочерние ключи (чтобы минимизировать объем передаваемых данных). Для иллюстрации предположим, что у меня есть следующая структура данных:

enter image description here

Тогда я хотел бы получить идентификаторы всех пользователей, поэтому 5Aoz6ZaB9QS7o9M4lsdbh07VGA02 и т. Д. Но без загрузки других пользовательских данных, таких как сообщения, имя, предложенное и оценка.

1 Ответ

0 голосов
/ 02 мая 2018

Чтобы получить идентификаторы этих пользователей, используйте следующий код:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String uid = ds.getKey();
            Log.d("TAG", uid);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(valueEventListener);

Вывод будет:

5Aoz6ZaB9QS7o9M4lsdbh07VGA02
// the other ids

Когда вы присоединяете слушателя к определенному узлу, вы получаете все данные под этим узлом. Вот как работает база данных Firebase Realtime, и, к сожалению, это поведение нельзя изменить. Но есть обходной путь, в котором вы можете создать еще один отдельный узел, в который вы можете добавить все эти идентификаторы отдельно. Новый узел должен выглядеть примерно так:

Firebase-root
   |
   --- userIds
          |
          --- 5Aoz6ZaB9QS7o9M4lsdbh07VGA02: true
          |
          --- //other ids

В этом случае, если вы присоедините слушателя к узлу userIds, вы получите только нужные данные и ничего более. Код для получения этих идентификаторов аналогичен приведенному выше коду, но вместо использования .child("users") необходимо использовать .child("userIds"). Вывод будет таким же.

Если вам нужно другое поведение, вы можете рассмотреть возможность использования Cloud Firestore , где это поведение больше не является проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...