我试图从受NYC MUG/SimpleReach架构启发的实时指标系统中提取报表数据,也许我的想法仍然停留在SQL模式中.
数据存储在这样的文档中......
{
"_id": ObjectId("5209683b915288435894cb8b"),
"account_id": 922,
"project_id": 22492,
"stats": {
"2009": {
"04": {
"17": {
"10": {
"sum": {
"impressions": 11
}
},
"11": {
"sum": {
"impressions": 603
}
},
},
},
},
}}
Run Code Online (Sandbox Code Playgroud)
我一直在尝试聚合管道的不同变体而没有成功.
db.metrics.aggregate({
$match: {
'project_id':22492
}}, {
$group: {
_id: "$project_id",
'impressions': {
//This works, but doesn't sum up the data...
$sum: '$stats.2009.04.17.10.sum.impressions'
/* none of these work.
$sum: ['$stats.2009.04.17.10.sum.impressions',
'$stats.2009.04.17.11.sum.impressions']
$sum: {'$stats.2009.04.17.10.sum.impressions',
'$stats.2009.04.17.11.sum.impressions'}
$sum: '$stats.2009.04.17.10.sum.impressions',
'$stats.2009.04.17.11.sum.impressions'
*/
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
(ps.有没有人对如何使用此文档架构进行日期范围搜索有任何想法?)
小智 8
$group旨在应用于许多文档,但在这里我们只有一个匹配的文档.相反,$project 可以用来总结特定字段,如下所示:
db.metrics.aggregate(
{ $match: {
'project_id':22492
}
},
{ $project: {
'impressions': {
$add: [
'$stats.2009.04.17.10.sum.impressions',
'$stats.2009.04.17.11.sum.impressions'
]
}
}
})
Run Code Online (Sandbox Code Playgroud)
我不认为使用此模式进行日期范围搜索是一种优雅的方式,因为MongoDB操作/预测旨在应用于值,而不是文档中的键.如果我理解正确,您提到的幻灯片中最有趣的一点是在更新时缓存/预先聚合指标.这是一个好主意,但可以用另一个模式实现.例如,将日期和时间与MongoDB支持的索引一起使用可能是范围搜索的不错选择.甚至聚合框架也支持数据操作,提供更大的灵活性
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |