如何在Firebase数据库中实现多个orderByChild查询

时间:2019-02-06 08:55:09

标签: javascript firebase firebase-realtime-database nosql

我知道firebase不允许多个orderByChild查询,因此我们必须重组代码以实现相同的效果。我正在尝试,但是我仍然坚持这样做。

我具有以下数据库结构:

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

我想做的是查看与州和/或城市有关的帖子,以及按starCount排序。只需使用以下内容,即可查看基于州和/或城市的帖子。

 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,所以我一直在关注如何重组数据库以实现上述结果。

我该怎么办?谢谢!

1 个答案:

答案 0 :(得分:0)

正如您在问题中说的那样,您无法做到这一点,Firebase不允许这样做。 您需要从第一个查询中获取结果,并在一次(“值”)调用之后通过代码对它们进行排序。

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

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

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