2017-12-22 1 views
0

を文字列値からソート順を提供しますのは、私は次のようになり、文書でコレクションを持っているとしましょうmongdb集約に

{ 
    _id: <someMongoId>, 
    status: 'start' 
    otherImportantData: 'Important!' 
} 

...とステータスが「スタート」、「ミドル」、または 'することができ終わり'。

ステータスフィールドでこれらのドキュメント(特に集約フレームワーク内)を並べ替える必要がありますが、アルファベット順に並べる必要はありません。私は開始 - >中間 - >終了の順にソートしたいと思う。

私はstatusフィールドを数字のstatusValueフィールドに投影する方法を探していましたが(どの文字列にマップするのかを指示するところがあります) 。

私がそれを行うことができるとしましょう。私はstatusを取ると、そのようにマッピングしたい:

start: 1 
middle: 2 
end: 3 
<anything else>: 0 

が、私は集約パイプラインでこのような何かを行うことができます:

{ 
    $sort: { statusValue : 1 } 
} 

...しかし、私はそれらを取得するかどうかはわかりませんアグリゲーションパイプラインにマップされたステータス。

私はそれを行う方法がない場合、少なくとも私は見て停止することを知っているでしょう。次善の方法は何でしょうか? MongoDBのMap-Reduce機能の使用?

+1

何かのように文書をソートする$sort続い文書に余分なフィールドに出力インデックスを維持するための値のリストと$addFieldsに検索文字列の位置を突き止めるために '[{" "$ status"; {"statusValue":{"statusValue":1}}}。それ以外は-1になります。 – Veeram

+0

それはそれをしました - 私はそれを受け入れるだろう答えとしてそれを書くように感じる場合! – WillyC

+0

どのように複製されていると思いますか?それは私にこの質問と関係がないように思われます、あなたが提供した答えは全く違っています(しかし私が間違っていれば私を修正してください)。 – WillyC

答えて

1

3.4で以下の集計を試すことができます。

使用$indexOfArray

[ 
{"$addFields":{ "statusValue":{"$indexOfArray":[[start, middle, end], "$status"]}}}, 
{"$sort":{"statusValue":1}} 
] 
関連する問題