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"
            }
          ]
        }
      ]
    }
  ]
}

我需要在一个按_id字段分组的查询中获取会话、pageViews 和事件的计数。

我愿意:

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 获取 totalSessions,因为具有相同 _id 的所有记录将具有相同数量的会话:

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 回答