数据库和项目订单(一般)

时间:2016-02-27 19:40:50

标签: mongodb database-design database

我现在正在尝试使用基于nodejs的实验应用程序,我将在其中放入一个书籍列表,它将每隔x分钟自动发布到论坛上。

现在我的问题是关于发布这些内容的顺序。

我使用mongodb(不确定这是否会改变问题)我只为每个要发布的项目添加一个新条目。通常,事情按我添加的确切顺序发布。

但是,对于这个实验性的网页界面,我做了一个重新排序的交互,我可以简单地拖放元素来重新排序它们。

我的问题是:如何将此更改反映到数据库中?

或者更一般地说,我如何在数据库中一般订购东西?

例如,如果我将第1000个项目拖到第1个订单,则需要在1到1000个条目之间编辑下面的所有内容(在db中)。这对我来说似乎不是一个有效和正确的解决方案。

赞赏任何启示。

1 个答案:

答案 0 :(得分:1)

优雅的方式可能是词典排序。为每个项目引入String属性。使值的初始长度足够大以容纳估计的项目数。例如,如果你期望1000件物品,那就让钥匙成为baa,bab,bac,... bba,bbb,bbc,......

然后,当一个项目从它移动到两个项目之间的另一个位置时,为一个移动项目的排序属性赋值,该属性与这些项目等距(按字典顺序)。因此,要在dei和dej之间移动项目,请为其赋予值deim。要在fadd和fado之间移动项目,请为其指定值fadi。

以a开头的键最初不用于为在第一个之前拖动的元素留出空间。切勿使用键a,因为在此之前移动元素是不可能的。

当然,使用的字符可能会根据数据库提供的排序顺序而有所不同。

只要元素不经常重新排序,此解决方案就可以正常工作。在最坏的情况下,这可能会导致更长和更长的属性值。但如果运动在某种程度上平均分配,则值的长度应保持合理。