[英]aggregating metrics data in mongodb
我正在嘗試從受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
}
},
},
},
},
}}
而且我一直在嘗試聚合管道的不同變體,但都沒有成功。
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'
*/
}
}
任何幫助,將不勝感激。
(ps。是否有人對如何使用此文檔模式進行日期范圍搜索有任何想法?)
$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'
]
}
}
})
我認為沒有一種使用這種模式進行日期范圍搜索的優雅方法,因為MongoDB操作/預測旨在應用於值,而不是文檔中的鍵。 如果我理解正確,您提到的幻燈片中最有趣的一點是在更新時緩存/預匯總指標。 這是一個好主意,但是可以用另一個模式來實現。 例如,將日期和時間與索引結合使用(MongoDB支持)可能是范圍搜索的不錯選擇。 甚至聚合框架也支持數據操作 ,從而提供了更大的靈活性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.