【问题标题】:Multiple orderBy in rest api urlrest api url中的多个orderBy
【发布时间】:2018-05-13 23:24:45
【问题描述】:

我现在正在使用 RESTful api 开发 Firebase。我有一个看起来像这样的示例数据

{
  "user1" : {
    "Name" : "John Doe",
    "acctStatus" : "Pending",
    "Liked" : "Y"
  },
  "user2" : {
    "Name" : "Jane Doe",
    "acctStatus" : "Done",
    "Liked" : "Y"
  }
}

所以我要做的是检索acctStatusPendingLiked 等于Y 的数据。这就是我的 api url 的样子

https://firebase.com/user.json?orderBy="acctStatus"&equalTo="Pending"&orderBy="Liked"&equalTo="Y"

但是,当我这样做时,我会同时检索 user1user2。为什么会这样?

【问题讨论】:

    标签: json rest firebase firebase-realtime-database


    【解决方案1】:

    您正在尝试链接多个 orderBy,这在 Firebase 中是不允许的。这是因为太多的查询会对性能产生负面影响,而 Firebase 有点想强迫您优化数据结构。

    因此,您有多种选择可以从这里开始。查看这篇文章以了解实时数据库的可能性:Query based on multiple where clauses in Firebase

    我会向您推荐这两种方法中的一种。

    1.使用新的 Cloud Firestore

    Firebase 最近推出了他们的新 Cloud Firestore,它基本上是一个基于 document 的数据库。这使您的数据结构变得更加容易,并且您可以链接queries 而不会以不良方式影响性能。在这里你可以了解更多:https://firebase.google.com/docs/firestore/use-rest-api

    这是一些关于如何构建query 的有用的额外资源: Firestore REST API starting query

    2。重组你的数据库

    如果您决定重组数据库,我建议您使用以下结构之一。

    将状态添加为节点:

    {
      "pending": {
        "user1" : {
          "Name" : "John Doe",
          "Liked" : "Y"
        },
      },
      "done": {
        "user2" : {
          "Name" : "Jane Doe",
          "Liked" : "Y"
        }
      }
    }
    

    现在只需将您的请求更改为以下内容:

    https://firebase.com/pending.json?orderBy="Liked"&equalTo="Y"

    或者作为第二个选项,您可以让我们使用这样的组合属性:

    {
      "user1" : {
        "Name" : "John Doe",
        "acctStatus" : "Pending",
        "Liked" : "Y",
        "queryProp" : "Pending-Y"
      },
      "user2" : {
        "Name" : "Jane Doe",
        "acctStatus" : "Done",
        "Liked" : "Y",
        "queryProp" : "Done-Y"
      }
    }
    

    然后只需通过queryProp 订购:

    https://firebase.com/user.json?orderBy="queryProp"&equalTo="Pending-Y"

    组合属性更易于维护,因为如果您的status 发生更改,您无需移动数据。但请记住,您将始终收到queryProp作为结果的一部分。

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      相关资源
      最近更新 更多