我有一个结构,需要在某个父级以下的用户登录,并且我需要知道我在哪个父级中才能修改该父级和我的用户ID,这是我的数据库结构
现在,我以用户节点下的一个用户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) {
}
});
答案 0 :(得分:2)
对于您当前的数据结构,没有有效的方法来查找已知用户ID的父级。 Firebase数据库不支持查询列表中是否存在特定值。
与NoSQL数据库一样,解决方案是添加一个附加的数据结构,该结构允许用户使用。在这种情况下,这将是一个简单的反向查找,其中用户ID是键,而父键是值。
类似的东西:
userLookup
RgF82BBZXhahtgYeZDWXwCk1q6b2: 9MmrGOJz9ePksi....
dRnalqAWm3............MM6vb2: 9MmrGOJz9ePksi....
现在,您可以轻松地查找给定用户ID的父键,然后在现有结构中查找其数据。
有关其他数据建模技巧,请参阅:
答案 1 :(得分:1)
如果有人感兴趣,我可以解决Puf建议的问题
首先,我创建了lookupTable
然后进行次要调用以完成它
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) {
}
});