由供应商名称分组
我有一个带有商店订单(“从客户”和“到供应商”)的集合:
[{
"orderNo": 1000,
"orderItem": 0,
"orderType": "CUST",
"company": {
"name": "CUSTOMER GMBH",
"uic": "DE300000XX"
},
"custPO": {
"grandTotal_eur": 146,
"products": [
{
"product": {
"code": "PROD-1000",
"title": "Product title 1000",
"toBuy": true,
"supplier": {
"code": "PROD-SUPP-1000",
"title": "Product supplier title 1000",
"company": {
"name": "SUPPLIER ONE GMBH",
"uic": "DE1000XXXX"
},
"price": 6
}
},
"qty": 5,
"price": 10,
"valueTotal": 50
},
{
"product": {
"code": "PROD-2000",
"title": "Product title 2000",
"toBuy": true,
"supplier": {
"code": "PROD-SUPP-2000",
"title": "Product supplier title 2000",
"company": {
"name": "SUPPLIER TWO GMBH",
"uic": "DE2000XXXX"
},
"price": 15
}
},
"qty": 2,
"price": 20,
"valueTotal": 40
},
{
"product": {
"code": "PROD-1010",
"title": "Product title 1010",
"toBuy": true,
"supplier": {
"code": "PROD-SUPP-1010",
"title": "Product supplier title 1010",
"company": {
"name": "SUPPLIER ONE GMBH",
"uic": "DE1000XXXX"
},
"price": 2
}
},
"qty": 2,
"price": 3,
"valueTotal": 6
},
{
"product": {
"code": "TRANS",
"title": "Transport fees"
},
"qty": 1,
"price": 50,
"valueTotal": 50
}
]
}
},
{
"orderNo": 1000,
"orderItem": 1,
"orderType": "SUPP",
"company": {
"name": "SUPPLIER ONE GMBH",
"uic": "DE1000XXXX"
},
"suppPO": {
"grandTotal_eur": 34,
"products": [
{
"product": {
"code": "PROD-SUPP-1000",
"title": "Product supplier title 1000"
},
"qty": 5,
"price": 6,
"valueTotal": 30
},
{
"product": {
"code": "PROD-SUPP-1010",
"title": "Product supplier title 1010"
},
"qty": 2,
"price": 2,
"valueTotal": 4
}
]
}
},
{
...
}]
总的来说,根据购物清单中产品的每个客户订单(例如1000-0)随后将其转换为多个供应商订单(例如1000-1,1000-2)。
我需要做的是创建一个mongoDB汇总,该汇总为 sum
valueTotal
的所有产品标记为 tobuy
,由 >供应商(供应商由
custpo.products。$。product.supplier.company.name
)
结束时,结果应该是这样的:
[{
"orderNo": 1000,
"company": {
"name": "CUSTOMER GMBH",
"uic": "DE300000XX"
},
"totals": [{
"supplierName": "SUPPLIER ONE GMBH",
"supplierTotal": 56
},{
"supplierName": "SUPPLIER TWO GMBH",
"supplierTotal": 40
},{
"supplierName": null,
"supplierTotal": 50
}]
}]
可以调整输出的结构根据可能性,重要的是触摸总和名称。
如果可以用一个聚集体进行一些提示或解决方案,请为我提供一些提示或解决方案。 使用了最新版本。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
$ undind
- 解构custpo.products
到多个文档的数组。$ match
- 用过滤文档“ custpo.products.product.tobuy”:true
。$ group
- 组成orderno
和supplierName
。3.1。获取
公司
通过$ first
。3.2。 sum
custpo.products.valuetotal
作为supplototal
。$ group
- 组成orderno
。4.1。获取
公司
通过$ first
。4.2。用
supplierName
和supplototal
将文档推入totals
array。示例mongo playground
$unwind
- DeconstructcustPO.products
array to multiple documents.$match
- Filter the documents with"custPO.products.product.toBuy": true
.$group
- Group byorderNo
andsupplierName
.3.1. Get
company
via$first
.3.2. Sum
custPO.products.valueTotal
assupplierTotal
.$group
- Group byorderNo
.4.1. Get
company
via$first
.4.2. Push the documents with
supplierName
andsupplierTotal
intototals
array.Sample Mongo Playground