Firebase:构建可以快速按多个标准过滤数据的数据结构的最佳实践

时间:2016-06-22 06:38:16

标签: firebase data-structures firebase-realtime-database nosql

例如,我有一个1.000.000用户的列表,数据如下所示:

users: {
  $userId: {
    name: "",
    sex: "",
    age: "",
    city: "",
    maritalStatus: "",
    // can be more
  }
}

我希望过滤分页以下数据:单身,男性,年龄<&lt;的用户30,住在X市。

是否有一种很好的做法可以减少这类查询的痛苦?

1 个答案:

答案 0 :(得分:2)

Firebase没有直接查询多个孩子的方法。

您可以构建数据以使其更容易 - 例如

users
  $userId
     gender_age:  male_27
  $userId
     gender_age:  male_32

然后,查询30到40之间的男性:

gender_age....queryStartingAtValue("male_30").endingAtValue("male_40")

这将缩小结果范围 - 然后您可以在代码中过滤所需的内容,例如(概念)

  if snapshot.child("maritalStatus") = "Single" and
     snapshot.child("city") = "AnyTown" then
         //add person to list for display

您可以稍微扩展一下以进一步缩小结果范围:

users
  $userId
     city_gender_age:  anytown_male_27

city_gender_age....queryStartingAtValue("anytown_male_30").endingAtValue("anytown_male_40")

不幸的是,如果查询不太具体,模式就会崩溃;例如如果我们在30到40岁之间的任何一个城市询问男性或女性,这都不会起作用。

然而,磁盘空间很便宜,因此存储重复的内容。另一个节点中的数据将解决该问题

another_node
   $user_id
      city_age: anytown_27