エロサイトの作り方

2013年11月から勉強しながらエロサイトを作っています。

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
        },
        ...

これで配列の要素ごとに集計できます。