我正在开发一个应用程序,其中记录按特定顺序出现。允许用户按照自己的意愿重新排序记录,我需要存储它。 我有一个每个记录的订单号,但是当它们重新排序记录时,会影响记录之后的所有记录 - 这可能是相当昂贵的数据库操作。
是否有一种聪明的方式来存储记录的订单号,这样它就不会影响许多其他记录?
答案 0 :(得分:0)
我已经编写了一个具有类似要求的高级Web应用程序。我在文档中添加了两个字段,其中包含有关用户可排序列表的元数据:
SortOrderVersion: integer
SortOrder: array of _id for documents
SortOrder
只包含每个文档的_id的有序数组。这个列表是由客户操纵的。第二个字段SortOrderVersion
用于同时保护多个客户端的更改。如果发送的版本与通过findAndModify
存储的版本匹配,则允许更新,并且数字会增加以防止其他客户端进一步更改。 (作为奖励,更改通过Web套接字连接推送给其他客户端)。
当这样做时,服务器会根据列表进行排序,然后在缓存时将其返回给客户端,并且不会经常更改。我本可以把繁忙的排序工作推到客户端,我只是觉得没必要。
我曾考虑将文档作为子文档存储在单个文档中的已排序数组中,但在我的情况下,它们是太多机会,其中多个用户将编辑子文档的详细信息,这会使复杂的更新和重新排序显着。
虽然我不需要它用于此Web应用程序,但通过独立存储排序顺序,我可以扩展应用程序以便在每个用户的基础上轻松提供排序。