Firebase数据库 - 为“动态”子级

时间:2018-02-20 14:55:34

标签: firebase firebase-realtime-database

我正在使用Firebase数据库来存储游戏的分数。一切正常,直到我决定实施“每周得分”。

为了能够按分数过滤然后按周排序,我将数据存储在以下结构中:

game_scores-weekly
    2018-01-29
        user_id: { score, date, bla, bla bla}
        user_id: { score, date, bla, bla bla}
        user_id: { score, date, bla, bla bla}

    2018-02-05
        user_id: { score, date, bla, bla bla}
        user_id: { score, date, bla, bla bla}

所以,这个工作得很好,但是由于没有索引“game_scores-weekly / new_week”indexOn“得分”,我每周都会因为性能问题而得到令人讨厌的警告。手动添加索引有效......直到下周,所以不是一个选项。

    "game_scores-weekly": {
      "2018-02-19": {
        ".indexOn": ["score", "uid"]
      },
      "2018-02-12": {
        ".indexOn": ["score", "uid"]
      }
    } 

有没有办法在日期中以某种方式指定通配符,所以它适用于任何新日期?或者我可以每周以编程方式创建新索引,还是有其他我可能没想过的解决方案?

另外,考虑手动创建一年中所有周的列表并一次性添加,但可能会有限制吗?

最后,但并非最不重要的是,我只对目前的一周和上周的分数感兴趣,任何年龄较大的我都想保留它以获得一些历史数据,但我不会在游戏中查询,所以可能摆脱旧周的指数。

干杯!

1 个答案:

答案 0 :(得分:7)

感谢@Tristan指出我正确的方向。

我使用以下代码来定义索引,现在警告已经消失:

queries

现在看起来非常明显,但在文档中找不到任何明确的内容。

请注意,"game_scores-weekly": { "$date": { ".indexOn": ["score", "uid"] } } 可以是任何名称,似乎您可以使用任何$date指定变量值。