Java Firebase数据库高级查询选项

Java Firebase数据库高级查询选项,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我的数据结构如下。本质上,我创建了一个“追随者”类别,作为每个键的子项,其中一个键表示一次投票。如果我的应用程序的当前用户ID列在“追随者”类别中,我希望该节点与我的查询相关。否则,我希望它被忽略 这种类型的查询可能吗?我从我的顶层“Polls”开始,然后我必须遍历每个子键,然后在该键中遍历“Following”子键: 这种查询是可能的 您只需查看每个轮询对象,并查看您要查找的用户ID是否存在于追随者列表中 另一种解决方案是保留一个Followers节点,该节点根据用户ID将Followers链

我的数据结构如下。本质上,我创建了一个“追随者”类别,作为每个键的子项,其中一个键表示一次投票。如果我的应用程序的当前用户ID列在“追随者”类别中,我希望该节点与我的查询相关。否则,我希望它被忽略

这种类型的查询可能吗?我从我的顶层“Polls”开始,然后我必须遍历每个子键,然后在该键中遍历“Following”子键:


这种查询是可能的

您只需查看每个轮询对象,并查看您要查找的用户ID是否存在于追随者列表中

另一种解决方案是保留一个Followers节点,该节点根据用户ID将Followers链接到他们关注的投票

这里将对此进行更详细的描述:

如果将数据拆分为单独的路径(也称为非规范化),则可以根据需要在单独的调用中高效地下载数据。考虑这个扁平结构:

{
  // Chats contains only meta info about each conversation
  // stored under the chats's unique ID
  "chats": {
    "one": {
      "title": "Historical Tech Pioneers",
      "lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
      "timestamp": 1459361875666
    },
    "two": { ... },
    "three": { ... }
  },

  // Conversation members are easily accessible
  // and stored by chat conversation ID
  "members": {
    // we'll talk about indices like this below
    "one": {
      "ghopper": true,
      "alovelace": true,
      "eclarke": true
    },
    "two": { ... },
    "three": { ... }
  },

  // Messages are separate from data we may want to iterate quickly
  // but still easily paginated and queried, and organized by chat
  // conversation ID
  "messages": {
    "one": {
      "m1": {
        "name": "eclarke",
        "message": "The relay seems to be malfunctioning.",
        "timestamp": 1459361875337
      },
      "m2": { ... },
      "m3": { ... }
    },
    "two": { ... },
    "three": { ... }
  }
}

有趣的是,听起来我没有最佳的数据结构。我已经想到了这一点,但是我设想用户不断地“投票”并向民意调查数据库中写入信息,因此我也会在该数据库中收听。我还没有真正找到一种方法来“去规范化”数据结构。如何在当前结构下创建查询?我在确定实际查询代码时遇到了一些问题。我不确定这是否是最有效的,但实际的查询是:创建PollResult列表获取所有轮询->为每个轮询遍历所有关注者->如果您要查找的关注者在轮询的关注者列表中,将轮询添加到轮询结果列表。一旦你完成了所有的民意调查,你应该有所有的民意调查的具体用户如下。明白了-所以我需要复制节点?我仍然对实际的代码感到困惑。我非常感谢你的帮助。你最初的询问是正确的,你只需要查看所有的民意测验。查询firebase的效率不高,这就是为什么他们建议在必要时对数据进行结构化,以便更快地检索。以下是通过事件(在您的情况下,这将是轮询)搜索搜索词的应用程序的外观。您将搜索用户ID,而不是用户提供的单词:
{
  // Chats contains only meta info about each conversation
  // stored under the chats's unique ID
  "chats": {
    "one": {
      "title": "Historical Tech Pioneers",
      "lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
      "timestamp": 1459361875666
    },
    "two": { ... },
    "three": { ... }
  },

  // Conversation members are easily accessible
  // and stored by chat conversation ID
  "members": {
    // we'll talk about indices like this below
    "one": {
      "ghopper": true,
      "alovelace": true,
      "eclarke": true
    },
    "two": { ... },
    "three": { ... }
  },

  // Messages are separate from data we may want to iterate quickly
  // but still easily paginated and queried, and organized by chat
  // conversation ID
  "messages": {
    "one": {
      "m1": {
        "name": "eclarke",
        "message": "The relay seems to be malfunctioning.",
        "timestamp": 1459361875337
      },
      "m2": { ... },
      "m3": { ... }
    },
    "two": { ... },
    "three": { ... }
  }
}