mongodb中具有顺序的聚合数组

mongodb中具有顺序的聚合数组,mongodb,aggregation-framework,Mongodb,Aggregation Framework,这是目前的结果 {{"id": 1, "result":["a", "b", "c", "d"]},{"id": 2, "result":["e", "f", "g", "h"]}} 我想要的是 {{"id": 1, "re

这是目前的结果

 {{"id": 1, "result":["a", "b", "c", "d"]},{"id": 2, "result":["e", "f", "g", "h"]}}
我想要的是

 {{"id": 1, "result":[{"before": "a", "after": "b"},{"before": "b", "after": "c"},{"before": "c", "after": "d"}]},{"id": 2, "result":[{"before": "e", "after": "f"},{"before": "f", "after": "g"},{"before": "g", "after": ""}]}}
我不知道怎么做,你需要使用框架

伪码

你必须把它读给像Jackson这样的JSONParser,然后操纵你当前的结果以得到你想要的结果。这是一本漂亮的手册:)
var tmp = [];
for(var idx=0; idx < result.length-1; idx++){
    tmp.append({before: result[idx], after: result[idx + 1]});
}
root.result = tmp;
db.collection.aggregate([
  {
    $project: {
      id: 1,
      result: {
        $map: {
          input: {
            $range: [
              0,
              {
                $subtract: [
                  {
                    $size: "$result"
                  },
                  1
                ]
              },
              1
            ]
          },
          as: "idx",
          in: {
            before: {
              $arrayElemAt: [
                "$result",
                "$$idx"
              ]
            },
            after: {
              $arrayElemAt: [
                "$result",
                {
                  $add: [
                    "$$idx",
                    1
                  ]
                }
              ]
            }
          }
        }
      }
    }
  }
])