在Firestore中达到最大组合索引数

时间:2019-04-29 05:28:34

标签: firebase indexing google-cloud-firestore

我有一个Firestore数据库,其中将游戏各个级别的等级得分存储在集合scores中,如下所示:

player1: { levels: {
 1: { score: 2343, timestamp: t1 },
 2: { score: 434, timestamp: t2 },
},
player2: { levels: {
 1: { score: 23, timestamp: t3 },
 2: { score: 34, timestamp: t4 },
}

要获得X级的最高分数,我运行查询:

collection('scores')
 .orderBy('levels.X.score')
 .orderBy('levels.X.timestamp', 'desc')

这需要为每个级别创建一个综合索引:collection:score, levels.x.score asc, levels.x.timestamp desc

200个复合索引的限制意味着我只能在数据库中创建200个级别。 有没有办法增加限额,可能要付出一些代价? 还是有一种方法可以修改我的数据库结构/查询以防止达到此限制?

1 个答案:

答案 0 :(得分:1)

Firestore限制无法更改。

您将不得不更改数据建模的方式。考虑将每个分数作为单独的文档存储在可以查询的集合中。因此,您将拥有:

/scores             // collection for all scores
  /some-id          // random id for this document with scores
    - playerId
    - level
    - score
    - timestamp

然后,您可以查询给定级别的所有分数

firestore
    .collection('scores')
    .where('level', '==', X)
    .orderBy('score')
    .orderBy('timestamp')

或者类似的东西。您只需一个复合索引即可支持此查询。