2016-02-27 54 views
1

我現在正在試驗一個基於nodejs的實驗性應用程序,在那裏我將放入一個書籍列表,它將每隔x分鐘自動發佈在一個論壇上。數據庫和項目訂單(一般)

現在我的問題是關於這些事情發佈的順序。

我使用mongodb(不知道這是否改變了問題),我只是添加一個新條目發佈每個項目。通常情況下,我按照我添加的順序發佈。

但是,對於這個實驗性事物的Web界面,我做了一個重新排序的交互,我可以簡單地拖放元素來重新排序它們。

我的問題是:我怎樣才能將這種改變反映到數據庫中?

或者更一般地說,我怎樣才能在數據庫中一般地排列東西?

例如,如果我將第1000個項目拖到第1個訂單,下面的所有內容都需要在1到1000個條目之間進行編輯(以db爲單位)。這似乎不是對我有效和適當的解決方案。

任何啓蒙感激。

回答

1

優雅的方式可能是詞典排序。爲每個項目引入一個String屬性。使值的初始長度足夠大以容納估計的項目數量。例如,如果您期望1000件物品,請將鑰匙設爲baa,bab,bac,... bba,bbb,bbc,...

然後,當物品從原來的位置移動到另一個位置時項目,爲移動項目的排序屬性指定一個值,該值與某些項目等距(按照字典順序)。所以要在dei和dej之間移動一個項目,給它一個價值標誌。要在fadd和fado之間移動項目,請將其值設爲fadi。

以a開頭的鍵最初並未用於爲在第一個元素之前被拖動的元素留出空間。切勿使用鍵a,因爲在此之前無法移動元素。

當然,使用的字符可能會根據數據庫提供的排序順序而有所不同。

只要元素不會非常頻繁地重新排序,該解決方案應該可以正常工作。在最壞的情況下,這可能會導致更長和更長的屬性值。但是,如果運動的分佈有點平等,價值的長度應保持合理。