首页 > 解决方案 > 如何在 Firebase 数据库中实现多个 orderByChild 查询

问题描述

我知道firebase不允许多个orderByChild查询,所以我们必须重组代码以达到相同的效果。我正在尝试,但我被困在如何做到这一点上。

我有以下数据库结构:

posts: {
   "-LY0tr3NmAlZhJDfxMch": {
   "State": "California",
   "City": "SanFrancisco",
   "StateCity": "California_SanFrancisco",
   "createdAt": 1549441397199,
   "postText": "Hello!!",
   "starCount": 0,
   "userId": "blAWQ9g9YMciB312fasdawqeqw",
   },
....
}

我想做的是查看用州和/或城市查询的帖子,并按星数排序。只需查看基于州和/或城市的帖子,可以使用以下方法完成。

 firebase
        .database()
        .ref()
        .child("posts")
        .orderByChild("State") // or City or StateCity
        .equalTo('...')
        ...

以上将仅基于州或城市或州城向我返回所有帖子。现在我想做的是用starCount 的数量再次订购这些返回的查询。例如,以下内容:

 firebase
        .database()
        .ref()
        .child("posts")
        .orderByChild("State") // or City or StateCity
        .equalTo('e.g. California') // query posts that have state California
        .orderByChild("StarCount") // from posts of California, order them by starCount
        .once("value")
        ...

我不能再次使用 orderByChild,所以我被困在如何重组我的数据库以实现上述结果。

我该怎么做?谢谢 !

标签: javascriptfirebasefirebase-realtime-databasenosql

解决方案


正如您在问题中所说,您不能这样做,Firebase 不允许这样做。您需要从第一个查询中获取结果,并在 once("value") 调用之后通过代码对它们进行排序。

var stateResult = firebase.database()
        .ref()
        .child("posts")
        .orderByChild("State") // 
        .equalTo('...');

//Do something here with the returned stateResult to order them by StarCount

您无需为此重构数据库,只需在代码中完成即可


推荐阅读