【问题标题】:Mongo pipeline aggregation for specific values in the same fieldMongodb管道聚合同一字段中的特定值
【发布时间】:2017-12-11 16:29:21
【问题描述】:

我的数据格式为:

缺陷周成本 aaa 1 123123 bbbb 1 2132131 cccc 1 213213 厄里亚 1 123 阿萨德 1 12343 dddd 1 123214 悲伤 1 13123 eeee 1 1313 aaa 2 141591.45 bbbb 2 2451950.65 cccc 2 245194.95 厄里亚 2 141.45 阿萨德 2 14194.45 dddd 2 141696.1 悲伤 2 15091.45 eeee 2 1509.95 aaaa 3 261944.1825 bbbb 3 4536108.703 cccc 3 453610.6575 厄里亚 3 261.6825 阿萨德 3 26259.7325 dddd 3 262137.785 悲伤 3 27919.1825 eeee 3 2793.4075

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

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

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

缺陷 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 子句,然后执行聚合。但是每个缺陷都需要单独的查询(这是不希望的)。
我们可以使用单个查询来做到这一点吗?如果是这样,怎么做?

【问题讨论】:

  • 您可以使用聚合。使用 $match 和 $in 缺陷列表来过滤匹配的文档,然后是缺陷的 $group 和带有 $sum 累加器的周来汇总成本。

标签: mongodb mongodb-query


【解决方案1】:

你可以像下面这样使用 mongo 聚合:

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
                }
            }
        }
    ]);

应该显示如下结果:

    {
        "_id": {
            "defect": "aaaa",
            "week: 1
        },
        "sumOfCost": 213213
    }
    {
        "_id": {
            "defect": 'aaaa',
            "week": 2
        },
        "sumOfCost: 123213
    }
    ...

【讨论】:

  • 工作就像一个魅力。谢谢
猜你喜欢
  • 2021-06-02
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多