检查Firebase实时数据库中许多子节点中的值

问题描述

如果子“联系人”的值为“ 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) {

        }
    });

这是数据库结构的图像

enter image description here

解决方法

Firebase查询在平面节点列表上操作,并且只能包含一个未知密钥。

据我所知,至少有两个级别的未知键(-MH...Ez129alMk....QS2),可能还有三个级别(Private Group)。无法通过数据库查询来查询此结构,您将需要提出不同的数据结构以允许您的用例。

例如,如果要允许查找给定联系人ID的帖子,请考虑完全存储该关系:

"contactsToPosts": {
  "$contactId": {
    "$postId": true
  }
}

有关此类数据建模权衡的更多信息,请参见:

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...