首页 > 解决方案 > Firebase 实时数据库:如何在此聊天应用数据结构中检索数据?

问题描述

我正在使用 Flutter 和 Firebase 实时数据库开发聊天应用程序。下面是我的 JSON 结构。

{
  "chat_room" : {
    "-MMR-dPo0A0nG4hcVW2j" : {
      "chat_mode" : "Supplier",
      "last_message" : "Test",
      "timestamp" : 1605713958580
    },
    "-MMRMbKC-818t2rg9UU5" : {
      "chat_mode" : "Supplier",
      "last_message" : "Test",
      "timestamp" : 1605719979342
    }
  },
  "members" : {
    "-MMR-dPo0A0nG4hcVW2j" : {
      "-MMR-dUUrMP1pDUZDMU3" : {
        "email" : "someone@test.com",
        "profile_pic" : "",
        "userID" : 30,
        "user_role" : "customer"
      },
      "-MMR-dYyDNdZfyLdCHD1" : {
        "email" : "anotherone@test.com",
        "userID" : 50,
        "user_role" : "supplier"
      }
    },
    "-MMRMbKC-818t2rg9UU5" : {
      "-MMRMbP_ucK89HU-yKaW" : {
        "email" : "someone@test.com",
        "profile_pic" : "",
        "userID" : 30,
        "user_role" : "customer"
      },
      "-MMRMbTzL3x3I9BqLxOD" : {
        "email" : "anotherone@test.com",
        "userID" : 50,
        "user_role" : "supplier"
      }
    }
  }
}
  1. 我首先创建一个chat_room
  2. 然后我将聊天室用户添加到members
  3. 为了确定哪个member属于哪个chat_room,我将chat_room唯一键添加为foreign keyinmembers并在其下添加所有相关项members

现在我的问题是,我需要membersemail属性搜索并获取 member与之关联的所有记录。例如,我需要搜索ismembers所在的记录。emailsomeone@test.com

这是我当前的代码,但它没有给出我需要的东西。我也知道这是不正确的。

final DatabaseReference reference = FirebaseDatabase.instance.reference().child('members');
reference.orderByChild("email").equalTo("someone@test.com").once()

如何在 Flutter 中执行此数据检索?如果我的聊天应用程序数据结构无效,我愿意为更好的结构提供建议。

标签: firebaseflutterfirebase-realtime-databaseflutter-dependencies

解决方案


推荐阅读