MongoDB - 如何进行查询以获取平均使用量?

MongoDB - How to make a query to get the average usage?

数据库中的文档如下所示。

/* 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"}
    }
])

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

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 }