3

我的文件如下所示:

{
        "_id" : "Tvq579754r",
        "Status" : "passed",
        "Title" : "up08c",
        "ProjectID" : "Tvq5p",
        "Version" : "1.0.0",
        "Platform" : "platform_x",
        "METRIC_A" : 11114.85,
        "METRIC_B" : 68.9,
        "METRIC_C" : 65.35,
},
{
        "_id" : "Tvq579755r",
        "Status" : "passed",
        "Title" : "up09c",
        "ProjectID" : "Tvq5p",
        "Version" : "1.0.0",
        "Platform" : "platform_x",
        "METRIC_A" : 21114.85,
        "METRIC_B" : 168.9,
        "METRIC_C" : 165.35,
},
{
        "_id" : "Tvq579756r",
        "Status" : "passed",
        "Title" : "up09c",
        "ProjectID" : "Tvq5p",
        "Version" : "1.0.0",
        "Platform" : "platform_x",
        "METRIC_A" : 31114.85,
        "METRIC_B" : 268.9,
        "METRIC_C" : 265.35,
}

现在我通过按、和分组来分组$avg和获取$sum我的METRIC_字段没有问题,但是我想在聚合框架中做的(如果可能的话)是返回一个使用分组值作为键的对象,例如:ProjectIDVersionPlatformTitle

{ 
        <Project ID> : {
                <Version> : {
                        <Platform> : {
                                <Title> : {
                                        "METRIC_A": <sum of METRIC_A>,
                                        "METRIC_B": <sum of METRIC_B>,
                                        "METRIC_C": <sum of METRIC_C>,
                                }
                        }
                }
        }
}

或者,在我的示例中:

{ 
        'Tvq5p' : {
                '1.0.0' : {
                        'platform_x' : {
                                'up08c' : {
                                        "METRIC_A": 11114.85,
                                        "METRIC_B": 68.9,
                                        "METRIC_C": 65.35,
                                },
                                'up09c' : {
                                        "METRIC_A": 52229.7,
                                        "METRIC_B": 437.8,
                                        "METRIC_C": 430.7,
                                }
                        }
                }
        }
}

一旦消费服务收到查询结果,我目前正在这样做,这并不是非常慢或任何东西,但我只是认为从 Mongo 中走出来会很好。这甚至可能吗?

谢谢。

4

1 回答 1

0

在 MongoDB 中有group operation

db.records.group( {
   key: { 'platform_x': 1, 'title': 1 },
   reduce: function(cur, result) { 
     result.metric_a += cur.metric_a;
     result.metric_b += cur.metric_b;
     result.metric_c += cur.metric_c;
   },
   initial: { metric_a = 0, metric_b = 0, metric_c = 0 }
 } )

如果这不起作用,我建议使用Map Reduce

于 2013-09-05T20:50:31.420 回答