簡體   English   中英

在mongodb中匯總指標數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM