我有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
字段的一个查询分组中计算会话,页面视图和事件的数量。
我做:
db.collection.aggregate([
{
$unwind: "$sessions"
},
{
$unwind: "$sessions.pageViews"
},
{
$group: {
_id : "$_id",
totalEvents: {
$sum: {
$size: "$sessions.pageViews.events"
},
},
totalPageViews: {
$sum: 1
}
}
}
])
但我无法理解如何计算会话次数。
如何在此查询中获取会话数?
谢谢!
答案 0 :(得分:2)
在使用$ project(在mongodb 3.2中提供)展开之前尝试计算会话数。然后,总会话将在$group
阶段提供。您可以为每个_id取$first
个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
}
}
}
])