【发布时间】:2020-05-04 17:39:48
【问题描述】:
我正在尝试使用 Firestore 对数据进行分页,并且会在预期重复的列上对数据进行排序,如果分页恰好在那些预期它无法正常工作的值之间。
我可以使用基于始终唯一的文档 ID 的 StartAfter 来解决此问题。
-
我可以做到这一点的一种方法是将最后一个文档的 id 传递给服务器端 rest api 请求。这需要两个步骤,即使用 DocumentId 获取 DocumentSnapshot 并基于它构造查询
var lastSnapshot = fetchSnapshot(id); cityRef.OrderBy("Population").StartAfter(lastSnapshot);
-
其他方法是在创建时将 DocumentId 保留在文档中。每次创建文档时都需要两个步骤,一个是创建,另一个是使用生成的 Id 立即更新(因为我没有看到方法在创建过程中保留 DocumentId)
citiesRef.OrderBy("Population").StartAfter(lastId);
其中一个是一个很好的方法,要么获取 DocumentSnapshot 而不是将 id 持久化到文档中,要么通过首先持久化 DocumentId 并将其用作 StartAfter 的键来执行两个操作。
【问题讨论】:
-
你为什么不使用docs中解释的解决方案?
-
根据文档,您只能减少歧义,而不是消除歧义,除非列排序基于唯一值:当使用基于字段值(不是 DocumentSnapshot)的游标时,您可以通过添加其他字段使光标位置更精确。如果您的数据集包含多个文档,这些文档对您的光标字段都具有相同的值,从而使光标的位置不明确,这将特别有用。您可以向光标添加其他字段值,以进一步指定起点或终点并减少歧义。