【问题标题】:MongoDB Aggregation add value based on document in same collectionMongoDB聚合基于同一集合中的文档增加价值
【发布时间】:2019-05-29 00:14:12
【问题描述】:

我遇到了一个似乎无法解决的 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,但这在这里不起作用......我不知道如何在光标当前所在的那个之前选择一个项目,以达到它的值并减去...

【问题讨论】:

标签: javascript node.js mongodb time-series aggregation


【解决方案1】:

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

【讨论】:

  • 我猜你是对的,我正在关闭它,并将在前端使用 JS 执行更改逻辑。 :) 感谢您的意见。
猜你喜欢
  • 1970-01-01
  • 2016-08-17
  • 2018-12-31
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 2020-12-12
相关资源
最近更新 更多