0

这是 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"}
    }
])
4

1 回答 1

0

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

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 }
于 2015-11-25T06:32:32.580 回答