2017-11-20 11 views
0

私は、フィールドidが含まれていにMongoDB 3.4 プログラムという名前の文書を持ってprogram_nameno_of_students下図のように:MongoDBの集計フレームワークを使用してソートを実行する方法は?

Program 
    { 
    "id": ObjectId("5a06509859000089ebe6f2ab"), 
    "program_name": "BBA", 
    "no_of_students": "50+"  
    }, 
    { 
    "id": ObjectId("5a06509859000089ebe6f3ac"), 
    "program_name": "BIM", 
    "no_of_students": "40-50" 
    }, 
    { 
    "id": ObjectId("5a06509859000089ebe6f4ad"), 
    "program_name": "MBA", 
    "no_of_students": "100+" 
    }, 
    { 
    "id": ObjectId("5a06509859000089ebe6f5ae"), 
    "program_name": "MIM", 
    "no_of_students": "60-75" 
    } 

UPDATE

ここに私のシナリオでno_of_studentsすることはできませんこれは、次のような値のような範囲を持つことができるため、Integerです。

ここで

no_of_student

"50-100" 
    "100+" 
    "10-50" 
    "200-500" 

私はのMongoDBの集約フレームワークを使用してno_of_studentsに基づいてソートします。以下に示すように適用される並べ替えた後、結果が表示されます:

Program 
    { 
    "id": ObjectId("5a06509859000089ebe6f3ac"), 
    "program_name": "BIM", 
    "no_of_students": "40-50" 
    }, 
    { 
    "id": ObjectId("5a06509859000089ebe6f2ab"), 
    "program_name": "BBA", 
    "no_of_students": "50+"  
    }, 
    { 
    "id": ObjectId("5a06509859000089ebe6f5ae"), 
    "program_name": "MIM", 
    "no_of_students": "60-75" 
    }, 
    { 
    "id": ObjectId("5a06509859000089ebe6f4ad"), 
    "program_name": "MBA", 
    "no_of_students": "100+" 
    } 
+0

: あなたのケースでは、使用して結果を並べ替えることができます"フィールドは文字列ですが、期待した結果が得られません。 総計で$ filterと$ condを試してください。結果には確認できません –

答えて

0

あなたは、次のコマンドを使用して、モンゴで並べ替えることができます:ここで

db.collection.find(query,fiels).sort({**key**:1}); 

は、1は昇順を意味し、-1降順を意味します。 「No_of_studentsを「50+」

db.class.find({}).sort({no_of_students:1}) 

しかし、良い結果、店no_of_student用として整数ではなく形式または「40-50」

+0

ありがとうございます。実際には私の要件のために 'no_of_student'をIntegerとして保存することはできません。また、mongoの集約を使用して並べ替える必要があります。私は私の質問を更新しました。それを確認してください。 –

+0

@khanalsirあなたの 'no_of_students'フィールドは値の範囲を表す文字列である必要があると言います。この制約を念頭に置いて、追加のフィールド(例えば、 'sort_key')を追加します。このフィールドには、文字列値の希望の順序を示す数値が入ります。この値をインデックスに含めると、一般的なクエリや並べ替え順序を効率的にサポートできます。たとえば、各範囲の開始値を使うことができます: '' 60-75 "' 'sort_key''は' 60'、 '50+' 'sort_key'は' 50'などです。集計を介して注文を計算することは効率的でもスケーラブルでもありません。 – Stennie

関連する問題