问题描述
如果子“联系人”的值为“ 9aIMkiMa0bSuMLjUk3R5bLpnoQS2”,我想从子“组”检索文本“私人组”。我还想从父子级“ questions posts”的其他子节点中检查相同的值。我一直在努力,但徒劳无功。这是我一直在使用的代码,但是只会产生错误。
final DatabaseReference groupsRef = FirebaseDatabase.getInstance().getReference().child("questions posts");
Query query = groupsRef.orderByChild("group").orderByChild("contacts");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
arrayList.clear();
if (snapshot.exists() && snapshot.hasChild(onlineUserId)){
arrayList.add(groupsRef.getKey().toString());
arrayAdapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
解决方法
Firebase查询在平面节点列表上操作,并且只能包含一个未知密钥。
据我所知,至少有两个级别的未知键(-MH...Ez12
和9alMk....QS2
),可能还有三个级别(Private Group
)。无法通过数据库查询来查询此结构,您将需要提出不同的数据结构以允许您的用例。
例如,如果要允许查找给定联系人ID的帖子,请考虑完全存储该关系:
"contactsToPosts": {
"$contactId": {
"$postId": true
}
}
有关此类数据建模权衡的更多信息,请参见: