私のコレクションの1つは、ステータスのある操作(またはタスク)のリストです。例えば、文書のリストは、私がnew > pending > complete
彼らの状況に基づいて、このリストをソートしたいこのMongoDBがカスタム式または関数を使用してソートする
{
_id: '57befe57fc956d2e3252890c',
task: 'Go buy milk',
status: 'pending'
},
{
_id: '57befe5efc956d2e3252890d',
task: 'Cook dinner',
status: 'complete'
},
{
_id: '57befe5efc956d2e3252890e',
task: 'Play games',
status: 'new'
}
のように見えることができます。
余分なフィールドを作成せずにMongoDBでどうすればいいですか?私の場合、ソート順はあらかじめ設定されていても構いません(ユーザは例えばpending > new > complete
に設定することができます)。
あなたがトンを処理できない理由として理由があります彼はクライアント側でソートしていますか? 最善の策は、すべての文書を返し、その後、ユーザーの優先順位に基づいて、サブグループを作成するためにフィルタを使用することです https://lodash.com/docs#filterあなたは、2つのパイプラインを持つ集約パイプラインでこれを行うことができ – dyouberg
、 '$ project'と' $ sort'です。 '$ project'は余分なフィールドを作成します。たとえば' $ cond'演算子であらかじめ設定された順序に基づいて 'score'が生成されます。例えば' status'の上記スコアの場合、 "new"は3になりますpending 2などの場合、 '$ sort'パイプラインはscoreフィールドをソートします。 – chridam
@dyouberg私はページネーションを使用しています。サーバー側で '$ limit'より前にソートする必要があります。そうしないと、ページネーションがすべて乱れてしまいます。なぜすべてのアイテムをクライアントにダウンロードすることをお勧めしますか?これは帯域幅と処理の悪い使用です。 –