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

我在这里有以下文件->

{ name: 'name', values: [ { value: 12, date: 2019-01-01 }, { value: 26, date: 2019-01-02 }, { value: 34, date: 2019-01-03 } ] }

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

{ name: 'name', values: [ { value: 12, date: 2019-01-01, changeDay: 0 }, { value: 26, date: 2019-01-02, changeDay: 14 }, { value: 34, date: 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,但这在这里不起作用...我不知道如何在光标当前所在的位置之前选择一个位置,以达到其值并减去...

最佳答案

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

09-25 23:54
查看更多