我有一个Firebase数据库,其中包含一个名为queue
的集合,其文档是队列中的项目。我需要保持它们的顺序(FIFO),但如果需要,还需要能够在队列中将它们移动任意数量。它们不能在数据库中保存。 This回答一个问题可以帮助我解决这个问题。但是,这假设您知道哪些项目处于什么位置。这是给出的解决方案:
在文档中有一个具有浮点值的
position
字段。查询按位置排序的集合。然后:
- 将项目放在最后时,请将其设为
lastItem.position + 100
- 移动项目时,请将
position
设置为(prev.position + next.position) / 2.0
,其中prev和next属于新职位的上一个和下一个。- 将项目移至行首时,
醇>firstItem.position / 2.0
e.g。
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
如何在不知道B位于我要移动到的地方的情况下,如何“将D移动到两个地方”这样的移动?我不想对整个集合进行排序以便移动它,因为这样效率很低。
答案 0 :(得分:0)
如果要更改项目相对于彼此的位置,则需要知道这些项目的索引。如果您没有允许您了解其索引的先验知识,则需要加载您正在修改的范围内的所有项目。据我所知,没有任何API快捷方式可以提供帮助。