1つのMongoDBアグリゲーションクエリによって複数のフィールドの異なる値を数えようとしています。mongodbアグリゲーションを使用した複数のフィールドの個別のカウント
だからここに私のデータです:
{
"car_type": "suv",
"color": "red",
"num_doors": 4
},
{
"car_type": "hatchback",
"color": "blue",
"num_doors": 4
},
{
"car_type": "wagon",
"color": "red",
"num_doors": 4
}
私はそれぞれのフィールドの個別の回数たい:私はグループの複数のフィールドをすることができたし、その後の個別のカウントを行いますが、それだけで与えることができる
distinct_count_car_type=3
distinct_count_color=2
distinct_count_num_doors=1
を私は最初のフィールドに数えます。それらのすべてではありません。 また、大きなデータセットです。
db.collection.aggregate([
{
"$group": {
"_id": null,
"distinct_car_types": { "$addToSet": "$car_type" },
"distinct_colors": { "$addToSet": "$color" },
"distinct_num_doors": { "$addToSet": "$num_doors" }
}
},
{
"$project": {
"distinct_count_car_type": { "$size": "$distinct_car_types" },
"distinct_count_color": { "$size": "$distinct_colors" },
"distinct_count_num_doors": { "$size": "$distinct_num_doors" }
}
}
])
残念ながら私はmongodb 3.2と$ objectToArrayを使用していますが、マニュアルによれば3.4で導入されたと思います。 – Deckard
正しい。 3.4.4へのアップグレードをお勧めします。 –
だから私はあなたのソリューションをアップグレードして試しました。私が今持っている問題は、別のコレクションからの$ルックアップのために実際に配列に入っている動的なフィールドです。質問の先頭のコレクションは、$ルックアップのために私の結果の配列にあります。ですから、フィールド上で$ objectToArrayを実行しようとすると、「$ objectToArrayにはドキュメント入力が必要です:array」となります。そして、私は$ arrayToObjectをまず呼び出して、$ objectToArrayを呼び出すことができました。 "$ arrayToObjectには、 'key'と 'v'のオブジェクトキーが必要です。 – Deckard