javascript - MongoDB 聚合根据同一集合中的文档添加值

标签 javascript node.js mongodb time-series aggregation

我的 MongoDB 聚合管道存在问题,但我似乎无法解决。

我这里有以下文档 ->

{ 名称:'名称', 值:[ { 值:12,日期:2019-01-01 }, { 值:26,日期:2019-01-02 }, { 值:34,日期:2019-01-03 } ] }

我正在运行聚合管道,并且我想使用 $project -> 输出以下文档 ->

{ 名称:'名称', 值:[ { 值:12,日期:2019-01-01,changeDay:0 }, { 值:26,日期:2019-01-02,更改日期:14 }, { 值:34,日期:2019-01-03,changeDay:8 } ] }

也就是说,我需要将changeDay 减去文档中的值减去该文档之前的文档中的值,依此类推。

我希望我说得足够清楚。

如果有帮助 - 我正在尝试按时间范围查询一个简单的时间序列文档,并且我需要输出每天值的变化。

到目前为止,我已经有了这个 MongoDB 聚合 ->

`[
  {
    '$match': {
      'pageid': '36606016799'
    }
  }, {
    '$lookup': {
      'from': 'likes', 
      'localField': 'likes', 
      'foreignField': '_id', 
      'as': 'likes'
    }
  }, {
    '$unwind': {
      'path': '$likes'
    }
  }, {
    '$match': {
      'likes.date': {
        '$gte': Date('Sat, 29 Dec 2018 22:00:00 GMT'), 
        '$lte': Date('Tue, 01 Jan 2019 22:05:00 GMT')
      }
    }
  }, {
    '$group': {
      '_id': '$name', 
      'likes': {
        '$push': '$likes'
      }, 
      'picture': {
        '$first': '$$ROOT.picture'
      }
    }
  }, {
    '$project': {
      '_id': 1, 
      'picture': 1, 
      'likes': {
        'value': 1, 
        'change': {
          '$map': {
            'input': '$likes', 
            'as': 'like', 
            'in': {
              '$add': [
                '$$like.value', 100
              ]
            }
          }
        }
      }
    }
  }
]`

您可以看到我在最后一个 $project 阶段尝试了 $map,但这在这里不起作用...我不知道如何在光标当前所在的项目之前选择一个项目,以达到其值并减去...

最佳答案

我不确定聚合管道是否可能。 但如果是这样,就不值得让聚合如此复杂。 获取数据,然后在服务器端执行业务逻辑。

关于javascript - MongoDB 聚合根据同一集合中的文档添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54004793/

相关文章:

node.js - 如何知道是哪个 Node :alpine image version is in running container

session - 如何覆盖 node.js 快速 session 的 session ID(使用护照)

MongoDB 最优索引 |查询规划器行为

javascript - 当用户使用 jquery 聚焦到 textarea 时显示按钮

javascript - MeteorJS 中的依赖管理

node.js - 用于从段落中提取最后一个数字组合的正则表达式

node.js - Mongoose:3 路文档连接

javascript - 无法第二次读取json文件: "Unexpected end of input error"

javascript - Javascript 中变量的引用

javascript - 如何将任何数组传递到使用 window.open() 打开的窗口