可编辑的同步排序顺序

时间:2018-02-21 18:33:41

标签: firebase firebase-realtime-database google-cloud-firestore

我如何实现Firestore,以便用户可以对数组中的项进行排序,并且排序顺序是否已同步?例如Todo列表中的订单商品。

我可以提出两种选择。但他们感觉不是好主意..

  1. 在指定的索引处插入项目。但我不确定如何或者如果你能用Firestore做到这一点?

  2. 每次添加新项目或“移动”项目时,都会将新的sortKey值映射到每个项目,然后更新所有项目。我可能能够用.batch这样做,但感觉超级低效?

  3. 一定有更好的方法!

    使用firebase实时数据库更容易吗?

1 个答案:

答案 0 :(得分:3)

我建议您在文档中设置一个position字段,将其设置为浮点值。使用按位置排序的查询来收听集合。然后:

  1. 将项目放在最后时,请将其设为lastItem.position + 100
  2. 移动项目时,请将position设置为(prev.position + next.position) / 2.0
  3. 将项目移至行首时,firstItem.position / 2.0
  4. 这样,您可以连续重新排序项目,而无需进行批量写入。我们来看一个例子:

    A: 100                   C:  50                    C:  50
    B: 200                   A: 100 -> move below B    B: 200
    C: 300 -> move to top    B: 200                    A: 300
    D: 400                   D: 400                    D: 400