【问题标题】:How to find the sum of values that are inside a nested array using mongodb aggregation?如何使用 mongodb 聚合查找嵌套数组内的值的总和?
【发布时间】:2021-05-19 01:15:13
【问题描述】:

我正在使用 node.js 并使用 Express 框架编写脚本。我正在使用云 Mongodb 并且无法访问 mongo shell,所以我无法轻松检查输出。我必须使用toArrray 函数将结果放入一个数组中,这样我才能看到输出的内容。 Console.log 有帮助,但有时当它是一个对象时它只显示 [],尽管如果我检查 Postman,我可以看到对象内的属性。

我有一个文档,我一直在 mongodb 中发送一个聚合管道,此时我被卡住了,res.send 中出现的输出是这样的:

[ { japanese_array: [ {"k": "japanese3a", "v": { "question": "japanese3a", "value": 100}}, 
                      {"k": "japanese3b", "v": { "question": "japanese3b", "value": 100}}, 
                      {"k": "japanese3c", "v": { "question": "japanese3c", "value": 100}} ] } ]

我想添加名为“值”的字段,因此所需的输出只是一个数字 (300)。

到达这一点花了很长时间,因为在 Stackoverflow 中遵循解决方案示例时遇到了很多麻烦,因为它们似乎使用了很多引号(例如“$project”),如果我复制示例在我的脚本中,包括引号,脚本不起作用。我必须删除 $project 等周围的引号才能使事情正常工作。我不明白为什么在某些词周围加上引号对其他人有用而对我无效。我使用的是 mongodb 4.2 版。

我已经在 stackoverflow 中检查了其他类似的问题好几天了,但没有一个解决方案适合我。

最接近为我回答的来自这里:How to sum every fields in a sub document of MongoDB?

但它仍然不起作用。我尝试在 $group 表达式中对 "$japanese_array.v.value" 求和,但它不起作用,我被困在此处显示的点上。

【问题讨论】:

    标签: javascript arrays mongodb nested sum


    【解决方案1】:

    我解决了这个问题。

    我为管道做了这个额外的阶段:

    {$project: {_id:0, "result":{$sum: "$japanese_array.v.value"}}}
    

    两天前我问了一个类似的问题,然后我得到的答案 How do you sum the values within an object which is a nested subdocument in mongodb using node.js? 帮助我在这里找到了解决方案。

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 2020-12-18
      • 2020-01-24
      • 2021-10-14
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      相关资源
      最近更新 更多