尝试这样的事情。存储一个跟踪总线数的计数器,我们称之为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