【问题标题】:MongoDB - How to make a query to get the average usage?MongoDB - 如何进行查询以获得平均使用量?
【发布时间】:2017-07-30 16:38:48
【问题描述】:

这是 db 中的文档的样子。

/* 1 */
{
  "_id" : 1,
  "feat" : {
      "processName": [
         {
            "value" : {
                 "value": "Process1"
             }
         }
       ],
      "processUsage": [
         {
            "value" : {
                 "value": 23.21
             }
         }
       ]
   }
}

/* 2 */
{
  "_id" : 2,
  "feat" : {
      "processName": [
         {
            "value" : {
                 "value": "Process2"
             }
         }
       ],
      "memoryUsage": [
         {
            "value" : {
                 "value": 2.411502e+05
             }
         }
       ]
   }
}

/* 3 */
{
  "_id" : 3,
  "feat" : {
      "processName": [
         {
            "value" : {
                 "value": "Process1"
             }
         }
       ],
      "processUsage": [
         {
            "value" : {
                 "value": 67.42
             }
         }
       ]
   }
}

/* 4 */
{
  "_id" : 4,
  "feat" : {
      "processName": [
         {
            "value" : {
                 "value": "Process3"
             }
         }
       ],
      "processUsage": [
         {
            "value" : {
                 "value": 39.97
             }
         }
       ]
   }
}

/* 5 */
{
  "_id" : 5,
  "feat" : {
      "processName": [
         {
            "value" : {
                 "value": "Process2"
             }
         }
       ],
      "processUsage": [
         {
            "value" : {
                 "value": 21.05
             }
         }
       ]
   }
}

每个进程都有带有 processUsage 和 memoryUsage 的条目。我感兴趣的是平均 processUsage。所以,我想忽略 memoryUsage 的条目。

我尝试了 $match + $group 与 $avg 的聚合,但对于每个进程,我只得到平均 0.00000000。 然后我用javascript尝试了mapReduce的运气,不幸的是它也没有成功。

有人能告诉我怎么做吗?顺便说一句,我使用的是 Robomongo 0.8.5

编辑:

查询如下所示:

db.database.aggregate([
    { $match : {"$feat.processUsage.value.value": {$gt : -1} 
    },
    {
      $group: {_id: "$feats.processName.value.value", average: {$avg:  
           "$feats.processUsage.value.value"}
    }
])

【问题讨论】:

  • 你能显示你试过的查询吗?
  • @toddmo:我添加了查询。
  • 您在错误的基础上进行分组。您将需要一个标识符来区分内存和进程。然后按它分组。
  • @tumbler 你想要平均所有processUsage 数据?

标签: sql mongodb robo3t database


【解决方案1】:

您可以使用以下聚合查询:

db.test.aggregate(
  [
    { 
       $unwind : "$feat.processUsage"
    },
    {
       $group: {
         _id: "$feat.processName.value.value",
         average: {$avg:"$feat.processUsage.value.value"}
        }
    }
  ]
)

在初始阶段展开将允许您过滤文档中具有 processUsage 键的文档。

结果:

{ "_id" : [ "Process2" ], "average" : 21.05 }
{ "_id" : [ "Process3" ], "average" : 39.97 }
{ "_id" : [ "Process1" ], "average" : 45.315 }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 2011-06-25
  • 2017-03-24
  • 1970-01-01
  • 2013-09-03
相关资源
最近更新 更多