2017-03-12 7 views
0

昇順のアカウントで結果をソートしてサブコレクションのカウントをカウントすることに問題があります。だから、問題は、私はまた、昇順に並べ替える配列フィールドrequireのカウントでコレクションを返したかったです結果をMongoDBに戻し、昇順でソートするサブコレクション配列の数を返します。

{ 
    "_id" : ObjectId("58bbf0a4b14e5fc44d5e9393"), 
    "label" : "Binarization", 
    "name" : "nlbin", 
    "require" : [] 
}, 
{ 
    "_id" : ObjectId("58bbfb5eb14e5fc44d5e9c87"), 
    "label" : "Binarization", 
    "name" : "jpeg", 
    "require" : [ObjectId("58bbf0a4b14e5fc44d5e9393")] 
}, 
{ 
    "_id" : ObjectId("58bbfb4db14e5fc44d5e9c76"), 
    "label" : "Binarization", 
    "name" : "pseg", 
    "require" : [ObjectId("58bbf0a4b14e5fc44d5e9393"), ObjectId("58bbfb5eb14e5fc44d5e9c87")] 
} 

:ここ

は私のコレクションscriptsがどのように見えるかです。 ObjectId("58bbf0a4b14e5fc44d5e9393")として完全に間違っている

{ 
    "_id" : ObjectId("58bbf0a4b14e5fc44d5e9393"), 
    "count" : 2 
}, 

{ 
    "_id" : ObjectId("58bbfb5eb14e5fc44d5e9c87"), 
    "count" : 1 
} 

数を持っている必要があります。

db.getCollection('scripts').aggregate({ $unwind: "$require" },{ $sortByCount:"$require" },{$sort: {count: 1}}) 

問題は、それが望ましい結果を返すされていない、それは実際にこのような何かが私を返すことです。私が書いたクエリは、このようなものでした0。最大のcount(つまりObjectId("58bbfb4db14e5fc44d5e9c76"))のコレクションも結果に含まれません。

最終的な結果は次のようにする必要があります:

{ 
    "_id" : ObjectId("58bbf0a4b14e5fc44d5e9393"), 
    "count" : 0 
}, 

{ 
    "_id" : ObjectId("58bbfb5eb14e5fc44d5e9c87"), 
    "count" : 1 
}, 
{ 
    "_id" : ObjectId("58bbfb4db14e5fc44d5e9c76"), 
    "count" : 2 
} 

は、あなたたちは私はあなたが行うことができます

答えて

1

最高のrequire配列のサイズを保持している($addFieldsを使用して)、余分なフィールドを追加で何を意味するのか理解ホープ$unwindを必要とせずに、そのフィールドに基づいてドキュメントを並べ替えることができます。

db.getCollection('scripts').aggregate([ 
    { "$addFields": { "count": { "$size": "$require" } } }, 
    { "$sort": { "count": 1 } } 
]) 
+1

ありがとうございます。これは私の集計関数でフィールドのような投影を行うことができてうれしいです。 – Seeker

関連する問題