【问题标题】:Check for a value in many child nodes in firebase real-time database检查firebase实时数据库中许多子节点中的值
【发布时间】:2021-01-13 19:31:49
【问题描述】:

如果子 'contacts' 的值为 '9aIMkiMa0bSuMLjUk3R5bLpnoQS2',我想从子 'group' 中检索文本 'Private Group'。我还想从父子“问题帖子”的其他子节点检查相同的值。我一直在努力,但徒劳无功。这是我一直在使用的代码,但它只产生了错误。

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

        }
    });

这是数据库结构的图像

【问题讨论】:

  • 子“Private Group”,是固定的吗?
  • 不,在其他节点,它可以不同。它是用户输入的值。

标签: java android firebase firebase-realtime-database children


【解决方案1】:

Firebase 查询对节点列表进行操作,并且只能包含单个未知键。

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

例如,如果您想允许查找给定联系人 ID 的帖子,请考虑准确存储该关系:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多