MongoDB聚合。获取价值差异

MongoDB聚合。获取价值差异,mongodb,Mongodb,我一直在与mongo进行斗争,试图找到一个解决方案来显示价值观之间的差异 我有这样的价值观: [ {val: 1}, {val: 4}, {val: 7}, {val: 8}, {val: 11} ] [ {diff: 3}, {diff: 3}, {diff: 1}, {diff: 3} ] 我想收到这样的东西: [ {val: 1}, {val: 4}, {val: 7}, {val:

我一直在与mongo进行斗争,试图找到一个解决方案来显示价值观之间的差异

我有这样的价值观:

[
    {val: 1},
    {val: 4},
    {val: 7},
    {val: 8},
    {val: 11}
]
[
    {diff: 3},
    {diff: 3},
    {diff: 1},
    {diff: 3}
]
我想收到这样的东西:

[
    {val: 1},
    {val: 4},
    {val: 7},
    {val: 8},
    {val: 11}
]
[
    {diff: 3},
    {diff: 3},
    {diff: 1},
    {diff: 3}
]
通过取下一个值(4)并减去上一个值(1),计算每个值。在所有这些之后,我们在输出中收到3,它作为第一项位于第二个列表中


是否可以使用MongoDB聚合实现它?

您需要将它们分组到阵列中,计算差异并再次展平

伪码 将以下步骤添加到管道中:

db.collection.aggregate([
  {
    $group: {
      _id: null,
      data: { $push: "$$ROOT" }
    }
  },
  {
    $addFields: {
      data: {
        $map: {
          input: {
            $range: [
              0,
              {
                $subtract: [
                  { $size: "$data" },
                  { $mod: [ { $size: "$data" }, 2 ] }
                ]
              },
              1
            ]
          },
          as: "idx",
          in: {
            diff: {
              $subtract: [
                {
                  $arrayElemAt: [
                    "$data.val",
                    {
                      $add: [ "$$idx", 1 ]
                    }
                  ]
                },
                {
                  $arrayElemAt: [ "$data.val", "$$idx" ]
                }
              ]
            }
          }
        }
      }
    }
  },
  {
    $unwind: "$data"
  },
  {
    $replaceRoot: {
      newRoot: "$data"
    }
  }
])

{val:1}
是单个文档还是数组项?它是聚合管道输出。(就像一份文件一样)