Firebase数据库如何知道用户在哪里编辑值

时间:2018-09-28 13:28:42

标签: java android firebase firebase-realtime-database

我有一个结构,需要在某个父级以下的用户登录,并且我需要知道我在哪个父级中才能修改该父级和我的用户ID,这是我的数据库结构

enter image description here

现在,我以用户节点下的一个用户ID登录我的应用程序,现在,我需要知道该用户的父级,以便在该父级下修改该用户

示例

我以用户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 :(得分:2)

对于您当前的数据结构,没有有效的方法来查找已知用户ID的父级。 Firebase数据库不支持查询列表中是否存在特定值。

与NoSQL数据库一样,解决方案是添加一个附加的数据结构,该结构允许用户使用。在这种情况下,这将是一个简单的反向查找,其中用户ID是键,而父键是值。

类似的东西:

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

现在,您可以轻松地查找给定用户ID的父键,然后在现有结构中查找其数据。

有关其他数据建模技巧,请参阅:

答案 1 :(得分:1)

如果有人感兴趣,我可以解决Puf建议的问题

首先,我创建了lookupTable

BruceWayne

然后进行次要调用以完成它

 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) {

            }
        });