首页 > 解决方案 > MongoDB 4 个级别的聚合分组

问题描述

我有一个 mongo 文档集合,包含 4 个级别的信息(按重要性):

-> 客户 -> 服务 -> expediteur -> 关税

[{
  "client": "CUSTOMER1",
  "service": "ADMINISTRATION"
  "expediteur": "EXPEDITOR1",
  "tarif": "ECOPLI 20g",
  "enveloppe": "C65",
  "prixAff": 0.86
},{
  "client": "CUSTOMER1",
  "service": "RESSOURCESH"
  "expediteur": "EXPEDITOR2",
  "tarif": "ECOPLI 20g",
  "enveloppe": "C65",
  "prixAff": 0.89
},{
  "client": "CUSTOMER2",
  "service": "SERVICE1"
  "expediteur": "EXPEDITOR7",
  "tarif": "ECOPLI 50g",
  "enveloppe": "C65",
  "prixAff": 1.25
},{
  "client": "CUSTOMER1",
  "service": "ADMINISTRATION"
  "expediteur": "EXPEDITOR4",
  "tarif": "ECOPLI 250g",
  "enveloppe": "C4",
  "prixAff": 3.26
},
...
]

我正在寻找一种编写聚合管道的方法,该管道将呈现如下聚合数据:

    [{"CUSTOMER1":
      [{"ADMINISTRATION":
        [{"EXPEDITOR1":
          [
            {"ECOPLI 20g": { "qte": 57, "prix": 0.86, "totalAff": 49.02, "totalEnvC65": 45, "totalEnvC4": 12}}
            {"ECOPLI 50g": { "qte": 21, "prix": 1.25, "totalAff": 26.25, "totalEnvC65":4, "totalEnvC4": 17}}
            {"ECOPLI 100g": { "qte": 10, "prix": 1.46, "totalAff": 14.6, "totalEnvC65":0, "totalEnvC4": 10}}
          ],
          "EXPEDITOR4":[
    ...

该字段包含该字段包含所考虑数据中的值totalEnvC65的次数,对于envelopeC65totalEnvC4

我开始写这个$group元素,但它不起作用

[
  {
    '$group': {
      '_id': {
        'client': '$client', 
        'service': '$service', 
        'utilisateur': '$expediteur', 
        'affranchissement': '$tarif'
      }, 
      'qte': {'$count': {}}, 
      'prix': {'$first': '$prixAff' }, 
      'totalAff': {'$sum': '$prixAff'},
      'totalEnvC65': {'$sum': {'$eq':{'$enveloppe' : 'C65'}}}
      "totalEnvC4": {'$sum': {'$eq':{'$enveloppe' : 'C4'}}}
    }
  }
]

标签: mongodbmongodb-query

解决方案


也许这个?它是您的查询,如果为真则添加 1,否则为 0。
如果这不是您需要的,如果您可以给我们一些示例数据和该数据的预期输出,那么我们尝试测试查询。

aggregate(
[{"$group": 
   {"_id": 
     {"client": "$client",
      "service": "$service",
      "utilisateur": "$expediteur",
      "affranchissement": "$tarif"},
    "qte": {"$count": {}},
    "prix": {"$first": "$prixAff"},
    "totalAff": {"$sum": "$prixAff"},
    "totalEnvC65": {"$sum": {"$cond": [{"$eq": ["$enveloppe", "C65"]}, 1, 0]}},
    "totalEnvC4": {"$sum": {"$cond": [{"$eq": ["$enveloppe", "C4"]}, 1, 0]}}}}])

推荐阅读