我已经从解析服务器转移到firebase用于我的新项目,但是在项目中我已经开始认为这是一个坏主意.
@H_502_1@基本上,我正在制作一个应用程序,人们可以发布有关他们镇上的音乐会的信息.
@H_502_1@我的第一个挑战是过滤事件,因此用户只能在他/她自己的城镇中获取事件.我通过构建城市之后的数据来做到这一点:
>某些音乐会只会锁定某些用户(例如已经参加过至少10场其他音乐会的用户),并且可能存在将这些音乐会拉回到用户不被允许看到它们的安全方面. @H_502_1@我想过组合过滤器来创建查询键,比如这个this,但是有了10多个过滤器,它将变得复杂. @H_502_1@有没有解决方案,或者我应该忘记这个用例的firebase? @H_502_1@提前致谢
{ concerts: { "New york": { ...,... },"Chicago": { ...,... } } }@H_502_1@然后我想我需要另一种音乐会类型的过滤器,例如摇滚,流行音乐等.所以我虽然做了另一次重组.但是,可能需要再增加5到10个过滤器,并且很难以良好的方式构建数据库. @H_502_1@我虽然有多个查询,但这是不允许的:
firebase.database().ref("concerts") .orderByChild("type").equalTo("rock") .orderByChild("length").equalTo("2") .orderByChild("artist").equalTo("beatles")@H_502_1@我想过从服务器获取所有内容,然后在客户端中过滤结果.然而,我看到两个问题: @H_502_1@>可能会下载大量不必要的数据.
>某些音乐会只会锁定某些用户(例如已经参加过至少10场其他音乐会的用户),并且可能存在将这些音乐会拉回到用户不被允许看到它们的安全方面. @H_502_1@我想过组合过滤器来创建查询键,比如这个this,但是有了10多个过滤器,它将变得复杂. @H_502_1@有没有解决方案,或者我应该忘记这个用例的firebase? @H_502_1@提前致谢
可以在Firebase中制作难以置信的复杂查询.数据需要存储在一个有待查询的结构中,最重要的是,不要害怕重复数据.
@H_502_1@例如,假设我们有一个应用程序,使用户能够选择特定年份和月份,特定城市和特定类型的音乐会.
@H_502_1@有3个参数
@H_502_1@YEAR_MONTH
市
类型 @H_502_1@UI首先查询用户以选择城市
市
类型 @H_502_1@UI首先查询用户以选择城市
Austin@H_502_1@然后UI要求选择年份和月份
201704@H_502_1@然后是一种类型
Rock@H_502_1@您的Firebase结构如下所示
concerts concert_00 city: Memphis year_month: 201706 genre: Country city_date_genre: Memphis_201606_Country concert_01 city: Austin year_month: 201704 genre: Rock city_date_genre: Austin_201704_Rock concert_02 city: Seattle year_month: 201705 genre: Disco city_date_genre: Seattle_201705_Disco@H_502_1@您的UI已经在用户中查询了查询信息,并使用该信息构建查询字符串
Austin_201704_Rock@H_502_1@然后在’city_date_genre’节点查询该字符串,并获得数据. @H_502_1@如果用户想知道2017年4月奥斯汀的所有音乐会,该怎么办?
queryStartingAt("Austin_201704").queryEndingAt("Austin_201704")@H_502_1@您可以通过添加另一个查询节点并更改数据的顺序来轻松扩展此功能
concerts concert_00 city: Memphis year_month: 201706 genre: Country city_date_genre: Memphis_201606_Country city_genre_date: Memphis_Country_201606@H_502_1@根据用户选择数据的顺序,您可以查询关联的节点. @H_502_1@添加额外的节点是一个很小的数据,并允许对您需要的数据进行非常开放的查询.