嘗試這樣的事情。存儲一個跟蹤總線數的計數器,我們稱之爲thread_count
,最初設置爲0,所以有一個文件看起來像{thread_count:0}
。
每次創建一個新的線程,使用{$inc : {thread_count:1}}
作爲改性劑第一次調用findAndModify()
- 即由1遞增計數器並返回其新值。
然後,當您插入新線程時,將計數器的新值用作文檔中字段的值,我們將其稱爲post_order
。
因此,您插入的每個文檔每次的值都大於1。例如,插入第一個3個文件應該是這樣的:
{name:'foo', post_order:1, created_at:... } // value of thread_count is at 1
{name:'bar', post_order:2, created_at:... } // value of thread_count is at 2
{name:'baz', post_order:3, created_at:... } // value of thread_count is at 3
等
那麼有效,你可以通過post_order
存在上升查詢和秩序,它會在他們返回最舊到最新的順序(或從最新到最舊的降序)。
然後,如果線條在其投票順序中按其排列順序「碰撞」,則可以在{$inc:{post_order:1}}
的文檔上調用update()
。這將按照結果排序順序將其前進1。如果兩個線程對於post_order具有相同的值,created_at將區分哪一個先到達。所以你會按post_order, created_at
排序。
您需要索引post_order
和created_at
。
所以你想要它根據1,2,1,0排序? – glortho 2012-01-05 02:58:47
不,我想結果「碰到」了很多結果 – sdfadfaasd 2012-01-06 00:04:01
請舉一個例子......「我有x存儲在數據庫中。一個請求進來,我想它做...」 – 2012-01-06 15:16:12