用于复杂查询的Firebase.不行吗?

前端之家收集整理的这篇文章主要介绍了用于复杂查询的Firebase.不行吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经从解析服务器转移到firebase用于我的新项目,但是在项目中我已经开始认为这是一个坏主意.

基本上,我正在制作一个应用程序,人们可以发布有关他们镇上的音乐会的信息.

我的第一个挑战是过滤事件,因此用户只能在他/她自己的城镇中获取事件.我通过构建城市之后的数据来做到这一点:

{
    concerts: {
        "New york": {
            ...,...
        },"Chicago": {
            ...,...
        }
    }
}

然后我想我需要另一种音乐会类型的过滤器,例如摇滚,流行音乐等.所以我虽然做了另一次重组.但是,可能需要再增加5到10个过滤器,并且很难以良好的方式构建数据库.

我虽然有多个查询,但这是不允许的:

firebase.database().ref("concerts")
.orderByChild("type").equalTo("rock")
.orderByChild("length").equalTo("2")
.orderByChild("artist").equalTo("beatles")

我想过从服务器获取所有内容,然后在客户端中过滤结果.然而,我看到两个问题:

>可能会下载大量不必要的数据.
>某些音乐会只会锁定某些用户(例如已经参加过至少10场其他音乐会的用户),并且可能存在将这些音乐会拉回到用户不被允许看到它们的安全方面.

我想过组合过滤器来创建查询键,比如这个this,但是有了10多个过滤器,它将变得复杂.

有没有解决方案,或者我应该忘记这个用例的firebase?

提前致谢

可以在Firebase中制作难以置信的复杂查询.数据需要存储在一个有待查询的结构中,最重要的是,不要害怕重复数据.

例如,假设我们有一个应用程序,使用户能够选择特定年份和月份,特定城市和特定类型的音乐会.

有3个参数

YEAR_MONTH

类型

UI首先查询用户以选择城市

Austin

然后UI要求选择年份和月份

201704

然后是一种类型

Rock

您的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

您的UI已经在用户查询查询信息,并使用该信息构建查询字符串

Austin_201704_Rock

然后在’city_date_genre’节点查询该字符串,并获得数据.

如果用户想知道2017年4月奥斯汀的所有音乐会,该怎么办?

queryStartingAt("Austin_201704").queryEndingAt("Austin_201704")

您可以通过添加另一个查询节点并更改数据的顺序来轻松扩展此功能

concerts
  concert_00
   city: Memphis
   year_month: 201706
   genre: Country
   city_date_genre: Memphis_201606_Country
   city_genre_date: Memphis_Country_201606

根据用户选择数据的顺序,您可以查询关联的节点.

添加额外的节点是一个很小的数据,并允许对您需要的数据进行非常开放的查询.

猜你在找的NoSQL相关文章