Mongo管道聚合用于同一字段中的特定值

时间:2017-12-11 16:29:21

标签: mongodb mongodb-query

我的数据形式如下:

defect                  week                        Cost  
aaaa                    1                       123123  
bbbb                    1                       2132131  
cccc                    1                       213213  
erea                    1                       123  
asdsad                  1                       12343  
dddd                    1                       123214  
sadsad                  1                       13123  
eeee                    1                       1313  
aaaa                    2                       141591.45  
bbbb                    2                       2451950.65  
cccc                    2                       245194.95  
erea                    2                       141.45  
asdsad                  2                       14194.45  
dddd                    2                       141696.1  
sadsad                  2                       15091.45  
eeee                    2                       1509.95  
aaaa                    3                       261944.1825  
bbbb                    3                       4536108.703  
cccc                    3                       453610.6575  
erea                    3                       261.6825  
asdsad                  3                       26259.7325  
dddd                    3                       262137.785  
sadsad                  3                       27919.1825  
eeee                    3                       2793.4075  

我需要对缺陷执行聚合,但我不需要所有缺陷的汇总成本(只是少数)。我有缺陷列表 我需要进行聚合。
例如:缺陷列表将存储在变量中,如下所示:

var specificdefects = [ aaaa, bbbb, cccc, dddd, eeee ]

我的最终目标是在每周获得特定缺陷的总计成本(类似于下面)。

defect  1           2           3   
aaaa    213213      123213      21313  
bbbb    234534.3    135534.3    23444.3  
cccc    257987.73   149087.73   25788.73  
dddd    283786.503  163996.503  28367.603  
eeee    312165.1533 180396.1533 31204.3633  

我知道我可以将每个缺陷传递给$match子句,然后执行聚合。但是每个缺陷都需要单独的查询(这是不可取的)。
我们可以使用单个查询执行此操作吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

您可以使用mongo聚合,如下所示:

$(document).ready(function() {});

哪个应显示如下结果:

db.someCollection.aggregate([
        {
            $match: {
                defect: {
                    $in: ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee'] // Match given defects
                }
            }
        },
        {
            $group: {
                _id: {
                    defect: '$defect', // Group on defect
                    week: '$week'  // Also, group on week
                },
                sumOfCost: {
                    $sum: '$cost' // Sum the cost for this unique group of defect and week
                }
            }
        }
    ]);