MongoDB 包含许多嵌入文档的聚合
MongoDB aggregation with many embedded documents
我有下一个结构 mongoDB collection:
{
"_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
}
}
}
])
但我不明白如何计算会话数。
如何获取此查询中的会话数?
谢谢!
尝试在使用 $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
}
}
}
])
我有下一个结构 mongoDB collection:
{
"_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
}
}
}
])
但我不明白如何计算会话数。
如何获取此查询中的会话数?
谢谢!
尝试在使用 $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
}
}
}
])