2016-03-30 6 views
1

ここに私のサンプルMongoDBコレクションがあります。登録された科目数の昇順ですべてのレコードのリストが必要です。MongoDBの配列サイズでレコードをソート

対応するMySQLのクエリは

SELECT name, COUNT(subject_code) AS NUM FROM table_name ORDER BY NUM ASC 

になります同じことを行うにはMongoDBのクエリを見つけるために私を助けてください:

{ 
    ["name"]=> string(5) "David" 
    ["subject_code"]=> array(5) { 
     [0]=> int(101) 
     [1]=> int(111) 
     [2]=> int(121) 
     [3]=> int(123) 
     [4]=> int(53) 
    } 
} 
+0

"*この質問には研究努力はありません。 [aggregation](https://docs.mongodb.org/manual/reference/operator/aggregation-pipeline/)あなたは質問に自分自身で答えることができます:配列のプロジェクトサイズ、そして結果を並べ替えます。 –

答えて

2

私はすでに利用可能な答えをチェックしています。それらは本当に役に立たない。この答えが役に立つと願っています。

は、このクエリは

db.collname.aggregate([{ $project: { name: 1, len: { $size: "$subject_code" }}}]) 

フィールドLENとしてリストの長さが一覧表示されます出力は今、物事は簡単です

{ "_id" : 1, "name" : "david", len: 3 } 
{ "_id" : 2, "name" : "joe", len: 1 ] } 
{ "_id" : 3, "name" : "sam", len: 0 } 

になります。あなたは次の書類を持って

{ "_id" : 1, "name" : "david", subject_code: [ 101, 111, 121 ] } 
{ "_id" : 2, "name" : "joe", subject_code: [ 131 ] } 
{ "_id" : 3, "name" : "sam", subject_code: [ ] } 

を仮定します。出力にソート関数を使用する(フィールド "len")

db.collname.aggregate( 
[ 
    {$project: {"name": 1, "nump": { $size: { "$ifNull": ["$subject_code", []] }}}}, 
    {$sort: {nump: -1}} 
]) 

これが完全なクエリです。これは、フィールドnumpでソートし、subject_codeフィールドが他のタイプのものであれば[] emplyリストを使用します。

+0

ありがとうたくさんの男 –