gpt4 book ai didi

node.js - 数字数组的求和

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:03 24 4
gpt4 key购买 nike

我想找到基于两个数组pbdinput的总计。只要类型和大小匹配,管道就应将 pbd.charge.sellRateinput.quantity 相乘。另外,我想将所有这些加在一起得到一个总计。

输入内容为

  {
"pbd": [
{
"type": "STD",
"size": "20",
"charge": {
"sellRate": 120
}
},
{
"containerType": "STD",
"containerSize": "40",
"charge": {
"sellRate": 290
}
}
],
"input": [
{
"type": "STD",
"size": "20",
"quantity": "20"
},
{
"type": "STD",
"size": "40",
"quantity": "20"
}
]
}

到目前为止,我已经使用了两个 $map 运算符,有点像两个 for 循环,如下所示:

db.collection.aggregate([
{
$project: {
"grandTotal": {
$map: {
input: "$pbd",
as: "pbd",
in: {
$map: {
input: "$input",
as: "inp",
in: {
$cond: {
if: {
$and: [
{
$eq: [
"$$pbd.type",
"$$inp.type"
]
},
{
$eq: [
"$$pbd.size",
"$$inp.size"
]
}
]
},
then: {
$multiply: [
{
$toInt: "$$pbd.charge.sellRate"
},
{
$toInt: "$$inp.quantity"
}
]
},
else: 0
}
}
}
}
}
}
}
}
])

我得到的输出是这样的

  {
"_id": ObjectId("5a934e000102030405000000"),
"grandTotal": [
[
2400,
0
],
[
0,
0
]
]
}

现在我想将所有这些数组相加得到一个总数。对此问题的更好解决方案也将受到高度赞赏。

这是一个包含大量其他数据的相当长的聚合管道的一部分,因此我不想对数据进行展开和分组。还有其他选择吗?

最佳答案

您可以运行$reduce作为管道的下一步:

db.collection.aggregate([
// your current aggregation pipeline
{
$project: {
total: {
$reduce: {
input: "$grandTotal",
initialValue: 0,
in: {
$add: [ "$$value", { $sum: "$$this" } ]
}
}
}
}
}
])

Mongo Playground

关于node.js - 数字数组的求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57093450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com