База данных Firebase, как узнать, где пользователь должен редактировать значения - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть структура, где мне нужно войти в систему с пользователем ниже определенного родителя, и мне нужно знать, в каком из них я нахожусь, чтобы изменить этого родителя и мой идентификатор пользователя, вот моя структура базы данных

enter image description here

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

Пример

Я авторизируюсь с пользователем RgF82BBZXhahtgYeZDWXwCk1q6b2, теперь мне нужно знать, что находится внутри 9MmrGOJz9ePksi.... родителя, чтобы добавить данные внутри этого родителя и внутри этого пользователя

Пробовал этот код, но он делает это только для случайного ключа, а не для ключа, содержащего этого пользователя

mDatabase.child("MyApp").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                    String key = snapshot.getKey();

                    mDatabase.child("MyApp").child(key).child("users").child(mAuth.getCurrentUser().getUid()).child("apples").setValue("3");

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

С вашей текущей структурой данных нет эффективного способа поиска родителя известного идентификатора пользователя.База данных Firebase не поддерживает запросы на наличие определенного значения в списке.

Как обычно для баз данных NoSQL, решение состоит в том, чтобы добавить дополнительную структуру данных, которую делает разрешающейваш пользовательский случай.В этом случае это был бы простой обратный поиск, где ID пользователя - это ключ, а родительский ключ - это значение.

Что-то вроде:

userLookup
  RgF82BBZXhahtgYeZDWXwCk1q6b2: 9MmrGOJz9ePksi.... 
  dRnalqAWm3............MM6vb2: 9MmrGOJz9ePksi.... 

Теперь вы можете легко просматриватьдо родительского ключа для данного идентификатора пользователя, а затем найдите его данные в существующей структуре.

Дополнительные советы по моделированию данных см. в:

0 голосов
/ 28 сентября 2018

Если кому-то интересно, я решил такие проблемы, как предложил Пуф

Сначала я создал таблицу поиска

enter image description here

А затем небольшие звонкичтобы сделать это

 mDatabase.child("MyApp").child("userLookup").child(mAuth.getCurrentUser().getUid()).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String key = dataSnapshot.getValue(String.class);
                mDatabase.child("MyActivity").child(key).child("users").child(mAuth.getCurrentUser().getUid()).child("apples").setValue(3);

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

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