MongoDBで配列の要素ごとに集計する
ダメな例
db.pages.aggregate([
{$group: {
_id: '$tags',
count: { $sum: 1}
}},
{$sort: {
count: -1
}}
]);
{
"result" : [
{
"_id" : "巨乳",
"count" : 78
},
{
"_id" : [
"二次",
"パンチラ"
],
"count" : 35
},
...
タグが複数入っていると、両方合わせてカウントしてしまう。
そんな時は$unwindを使う
$unwind
を使うと、配列の中身を展開してくれます。
db.pages.aggregate([
{$unwind: '$tags'},
{$group: {
_id: '$tags',
count: { $sum: 1}
}},
{$sort: {
count: -1
}}
]);
{
"result" : [
{
"_id" : "二次",
"count" : 43911
},
{
"_id" : "おっぱい",
"count" : 5142
},
...
これで配列の要素ごとに集計できます。