mongodb - 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
的次数,对于envelope
C65
totalEnvC4
我开始写这个$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'}}}
}
}
]
解决方案
也许这个?它是您的查询,如果为真则添加 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]}}}}])
推荐阅读
- r - 如何在 .Machine 中增加 $double.xmax?
- matlab - 如何从 Matlab 中的回调函数中获取数据以进行进一步处理?
- c++ - 调试断言失败缓冲区!= nullptr
- php - 使用 Cron 作业时未定义的 REMOTE_ADDR - Laravel 的背包
- image-processing - 深度学习中如何处理整张幻灯片图像
- c# - 随机移动脚本导致 Unity 冻结
- google-sheets - 如何检查一行是否有数据和条件格式?
- python - 将数组顶部 0.005% 的元素设置为 1 并将其余元素设置为零的简单方法
- angular - Angular LiveReload 不适用于 Linux 的 Windows 子系统
- flutter - Codemagic 与 Azure Dev Ops