如何执行这个mongo聚合? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我有一个mongo的集合,看起来像这样:

{
    "_id" : ObjectId("5c98d6f383d67f243730443b"),
    "date" : ISODate("2019-03-24T00:00:00Z"),
    "symbol" : "F:ABCD",
    "symbolCode" : "wcgahi8gap",
    "close" : 8.09,
    "high" : 24.82,
    "low" : 8.09,
    "numPoints" : 8,
    "open" : 20.84,
    "volume" : 21183
}
{
    "_id" : ObjectId("5c98d6f383d67f243730443c"),
    "date" : ISODate("2019-03-25T00:00:00Z"),
    "symbol" : "F:ABCD",
    "symbolCode" : "wcgahi8gap",
    "close" : 1.77,
    "high" : 23.47,
    "low" : 1.77,
    "numPoints" : 3,
    "open" : 8.21,
    "volume" : 9645
}

其中显示了一天结束时的股票价格。我正在尝试编写一个聚合来计算1天间隔内每只股票的变化/百分比变化。所以它应该只是当前天关闭字段和前一天关闭字段之间的差异。我怎样才能做到这一点?

这是我到目前为止:

  const results = await Price.aggregate([
    { $match: { date: { $gte: yesterday } } },
    { $sort: { date: 1 } },
    { $group: { '_id': '$_id',
      'old': {
        $sum: { $cond: [{ '$eq': [ '$date', yesterday ] }, '$close', 0] }
      },
      'new': {
        $sum: { $cond: [{ '$eq': [ '$date', today ] }, '$close', 0] }
      } } },
    { $project: { date: 1, symbol: 1, difference: { $subtract: ['$new', '$old'] } } }
  ])

我知道我错过了小组赛的一个重要部分,但我无法弄清楚。

mongodb
1个回答
0
投票

所以这就是我做的方式:

  const results = await Price.aggregate([
    { $match: { date: { $gte: yesterday } } },
    { $sort: { date: 1 } },
    { $group: { '_id': '$symbol',
      old: {
        $sum: {
          $cond: [{ $eq: ['$date', yesterday] }, '$close', 0]
        }
      },
      new: {
        $sum: {
          $cond: [{ $eq: ['$date', today] }, '$close', 0]
        }
      } } },
    { $project: {
      symbol: '$_id',
      change: { $subtract: ['$new', '$old'] },
      changePrc: { $divide: [{ $subtract: ['$new', '$old'] }, '$old'] }
    } }
  ])

使用this的答案求助。

© www.soinside.com 2019 - 2024. All rights reserved.