このようなものを試してみてください。スレッドの総数を追跡するカウンタを格納して、それをthread_count
と呼びましょう。最初は0に設定されているので、{thread_count:0}
のような書類があります。
新しいスレッドが作成されるたびに、修飾子として{$inc : {thread_count:1}}
を使用して最初にfindAndModify()
を呼び出します。つまり、カウンタを1増加して新しい値を返します。
新しいスレッドを挿入するときに、カウンタの新しい値をドキュメントのフィールドの値として使用します。これをpost_order
とします。
したがって、挿入する各ドキュメントの値は1ずつ大きくなります。だから、効果的に、あなたが照会および順序post_order
によってASCENDINGとして、それはそれらを返しますすることができます
{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
など
:たとえば、あなたが挿入最初の3文書は次のようになります。古いものから新しいものへの順序(または最も新しいものから最も古いものへのDESCENDING)。
スレッドがupvotedになったときにスレッドをソート順に「バンプ」すると、という文書でupdate()
を呼び出すことができます。結果ソートの順に1ずつ進めます。 2つのスレッドがpost_orderに同じ値を持つ場合、created_atは最初に来るものを区別します。だから、あなたはpost_order, created_at
で並べ替えるでしょう。
post_order
とcreated_at
にはインデックスが必要です。
だから、1、2、1、0に従ってソートしたいですか? – glortho
いいえ、私はその結果を "ぶつかって"多くの結果を得たいと思います – sdfadfaasd
例を挙げてください... "私はxをデータベースに保存しています...リクエストが入ってきました...私はそれにyをしたい..." –