1

mongoDB コレクションの次の構造があります。

{
  "_id": "1",
  "sessions": [
    {
      "type": "default",
      "pageViews": [
        {
          "path": "/",
          "host": "example.com",
          "events": [
            {
              "name": "event1"
            },
            {
              "name": "event1"
            }
          ]
        }
      ]
    },
    {
      "type": "default",
      "pageViews": [
        {
          "path": "/",
          "host": "example.com",
          "events": [
            {
              "name": "event1"
            },
            {
              "name": "event1"
            }
          ]
        }
      ]
    }
  ]
}

フィールドごとにグループ化された1つのクエリで、セッション、ページビュー、およびイベントの数を取得する必要があります_id

そうです:

db.collection.aggregate([

    {
        $unwind: "$sessions"
    },

    {
        $unwind: "$sessions.pageViews"
    },

    {
        $group: {
            _id : "$_id",
            totalEvents: {
                $sum: {
                    $size: "$sessions.pageViews.events"
                },
            },
            totalPageViews: {
                $sum: 1
            }
        }
    }

])

しかし、セッション数を取得する方法がわかりません。

このクエリでセッション数を取得するにはどうすればよいですか?

ありがとう !

4

1 に答える 1

2

$project (mongodb 3.2 で利用可能) を使用して、巻き戻す前にセッションを数えてみてください。その後、合計セッションが$groupステージで利用可能になります。$first同じ _id を持つすべてのレコードは同じ数のセッションを持つため、各 _idの totalSessions を取得できます。

db.collection.aggregate([

    { $project : { sessions: 1, totalSessions : { $size : "$sessions" } } },

    {
        $unwind: "$sessions"
    },

    {
        $unwind: "$sessions.pageViews"
    },

    {
        $group: {
            _id : "$_id",
            totalSessions: { $first : "$totalSessions" },
            totalEvents: {
                $sum: {
                    $size: "$sessions.pageViews.events"
                },
            },
            totalPageViews: {
                $sum: 1
            }
        }
    }
])
于 2016-06-01T12:27:29.117 に答える