在Firebase实时数据库中构建双向关系

时间:2019-02-27 12:28:37

标签: json firebase firebase-realtime-database

以下代码取自Firebase docs about structuring data。对于我的某些数据,我有类似的设置,但是还有一个额外的要求,即该特定示例似乎无法涵盖。

假设您要检索属于“ techpioneers”组的每个用户的姓名。

我是说正确的吗,唯一的方法是从groups/techpioneers/members获取成员列表,然后遍历它们以获取users/$userId

如果您有数百万个用户,这不会变得非常低效吗?您当然可以限制结果,但是如果您必须获取属于techpioneers组的100个成员,则这是100个单独的请求。

在这种基础上,这种结构化仍然是扩展数据的最佳方法吗?

// An index to track Ada's memberships
{
  "users": {
    "alovelace": {
      "name": "Ada Lovelace",
      // Index Ada's groups in her profile
      "groups": {
         // the value here doesn't matter, just that the key exists
         "techpioneers": true,
         "womentechmakers": true
      }
    },
    ...
  },
  "groups": {
    "techpioneers": {
      "name": "Historical Tech Pioneers",
      "members": {
        "alovelace": true,
        "ghopper": true,
        "eclarke": true
      }
    },
    ...
  }
}

我的想法是,最好使用这样的另一个密钥结构:

{
  "groupUsers":
    "techpioneers": {
      "alovelace": {
        "name": "Ada Lovelace"
      }
    }
}

这样做意味着您只需向groupUsers/techpioneers发出一个请求即可接收所有成员及其姓名。

我渴望按照文档中显示的建议确保结构保持尽可能平坦。

我是在考虑正确的路线还是被误解了?任何建议将不胜感激。

0 个答案:

没有答案