Firestore数据库可容纳多个用户独立安排物品

时间:2019-08-24 04:27:30

标签: firebase google-cloud-firestore

我需要为我的应用程序设计Firestore数据库方面的帮助。该应用程序具有三个要求:

  1. 在回收者视图中显示文档;
  2. 用户通过拖放来重新排列文档项目;和
  3. 多个用户可以访问文档并独立地重新排列他们的项目。

第一个要求是直接使用Firestore查询。

我计划在文档中具有“位置”字段的第二个要求,以便可以通过“位置”字段“对查询进行排序”。

这是我遇到困难的第三个要求。我的第一个想法是要与每个用户关联多个“位置”字段,并通过“用户的位置”字段对查询进行排序。但是,由于Firestore需要为每个查询建立索引,所以这种方法行不通。

对于如何最好地设计Firestore数据库来满足应用程序的三个要求的任何建议,将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以将每个用户的订单存储在每个用户的文档或集合中(与数据本身分开组织)。只需将每个文档ID映射到该用户为其选择的位置。这意味着您还需要一个单独的查询来获得该顺序,但根本不需要一个新的索引。

答案 1 :(得分:0)

对于其他感兴趣的人,下面介绍了我的更改:

  1. 从Firestore项目文档中排除了“位置”字段。因此,现在从Firestore检索项目文档时,它们不包含任何位置信息。而且它们的下载没有特定顺序。
  2. 我创建了一个新的Firestore“状态”文档,其中包含一个“位置”字段,该字段是一个地图,其键为项的uid,位置Int为值。 (我还包括一个Int字段,该字段保存回收者视图的firstVisiblePosition,另一个保存其offsetTop,以便可以将回收者视图恢复到其最后位置。)
  3. 在初始加载项目文档后,位置值将应用于每个项目文档。物料文档按位置排列。
  4. 我可以在回收者视图的适配器中处理添加,修改和删除的文档更改事件。更改事件“ oldIndex”和“ newIndex”的值未使用。
  5. 最后,我在onStop生命周期回调中将“状态”文档保存在用户的subCollection下。

希望这会有所帮助。