如何使用 jSONata 以高效的方式连接 2 个数组?

How to join 2 arrays in a performant way using jSONata?

我想使用 JSONata 以高效的方式加入 2 个具有大约 500 个元素的数组。

我找到了一种连接 2 个数组的方法,但它的性能不是很好。 请参阅 https://try.jsonata.org/VqzeZDAjA(下面复制了相同的 input/output 和查询)。

输入:

{
  "_msgid": "a070e32c.e71ed",
  "topic": "",
  "rc": {
    "code": 0
  },
  "table1": {
    "array1": [
      {
        "country_region": "Thailand",
        "field_A": "A for Thailand"
      },
      {
        "country_region": "Japan",
        "field_A": "A for Japan"
      }
    ]
  },
  "array2": [
    {
      "country_region": "Thailand",
      "field_B": "B for Thailand"
    },
    {
      "country_region": "Japan",
      "field_B": "B for Japan"
    }
  ]
}

预期输出:

{
  "array1": [
    {
      "country_region": "Thailand",
      "field_A": "A for Thailand",
      "field_B": "B for Thailand"
    },
    {
      "country_region": "Japan",
      "field_A": "A for Japan",
      "field_B": "B for Japan"
    }
  ]
}

工作查询[=​​32=]但在包含 500 个元素的数组的情况下性能不佳。

(
    $array2 := array2;
    table1 ~> | array1 | { "field_B" : 
              ($country_region := country_region;
               $array2[$country_region=$.country_region])
                .field_B}|
)

更新2020-03-29

上面声称工作查询(见上文)的性能不是很好。进一步分析表明这不是真的:上述查询的实际性能很好(与批准的查询的性能相似)。我遇到的性能问题是由另一个与此连接无关的 JSONata 查询引起的!

不确定它是否更高效,但我会使用连接语法来执行此操作:

{
    "array1": array2@$A2.table1.array1@$A1[$A1.country_region = $A2.country_region].$merge([$A1, $A2])   
}