2015-10-09 14 views

答えて

0

は、ASCをソートする - >ステータス:1

db.users.find().sort({ status: 1 }) 

はDESCをソートする - >ステータス:-1

db.users.find().sort({ status: -1 }) 
+0

これは単純な並べ替えです。どのように私は値に従ってソートするでしょう。したがって、 'C'、 'A'、 'B'、 'D'のステータス - 'C'のステータスを持つユーザーが返されます。 –

+0

ステータス(必要に応じて並べ替えた)の配列をパラメータとして送信しますか? – makcs

5

あなたは順番に$projectに各値の "重み" が必要MongoDB用語では、それは.aggregate()メソッドを意味します:

db.users.aggregate([ 
    { "$project": { 
     "status": 1, 
     "a_field": 1, 
     "another_field": 1, 
     "pretty_much_every_field": 1, 
     "weight": { 
      "$cond": [ 
       { "$eq": [ "$status", "A" ] }, 
       10, 
       { "$cond": [ 
        { "$eq": [ "$status", "B" ] }, 
        8, 
        { "$cond": [ 
         { "$eq": [ "$status", "C" ] }, 
         6, 
         { "$cond": [ 
          { "$eq": [ "$status", "D" ] }, 
          4, 
          0 
         ]} 
        ]} 
       ]} 
      ] 
     } 
    }}, 
    { "$sort": { "weight": -1 } } 
]) 

ternary$condのネストされた使用では、 "status"の各項目は、引数の順序で順序付けられた "weight"値とみなされます。

これは、$sortに供給されます。投影値( "weight")は、重み付きマッチングによってスコアリングされた結果をソートするために使用されます。

このように、ソートされた結果の最初に現れる「ステータス」の一致の順番が優先されます。

関連する問題