我有一个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个级别。 有没有办法增加限额,可能要付出一些代价? 还是有一种方法可以修改我的数据库结构/查询以防止达到此限制?
答案 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')
或者类似的东西。您只需一个复合索引即可支持此查询。