微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当有一个 ARRAY 也在另一个 ARRAY 中时,如何在不使用 UNNEST 的情况下使用 ARRAY 函数?

如何解决当有一个 ARRAY 也在另一个 ARRAY 中时,如何在不使用 UNNEST 的情况下使用 ARRAY 函数?

以下是示例文档

[
     {
    "trans-data": 
        { 
       "$Docver":"1.0","ManufId":"1234543","ToyDot": 
                 {
                   "GrossAmt":"675","Wqty":"200"
                  },"Mflnitmlst": 
                   [
                      {
                        "mfprcdv":"25000","SaleDt1":
                          [
                            {
                              "Mtid":"0987655","ordrqty":"102","Plainqty":"1000"
                             }
                          ]
                       },{
                        "mfprcdv":"25000","SaleDt1":
                          [
                            {
                              "Mtid":"0987656","ordrqty":"110","Plainqty":"1500"
                             }
                          ]
                      },"SaleDt1":
                          [
                            {
                              "Mtid":"0987657","ordrqty":"120","Plainqty":"2000"
                             }
                          ]
                      }
                   ],"Tmstp":"2021-03-04T14:23:21","Sectn":"XYZ"
       }
     },{
    "trans-data": 
        {
        "$Docver":"1.0","ToyDot": 
                 {
                   "GrossAmt":"605","Wqty":"100"
                  },"Mflnitmlst": 
                   [
                      {
                        "mfprcdv":"26000","SaleDt1":
                          [
                            {
                              "Mtid":"1987655",{
                        "mfprcdv":"26000","SaleDt1":
                          [
                            {
                              "Mtid":"1987656","SaleDt1":
                          [
                            {
                              "Mtid":"1987657","Sectn":"XYZ"
       }
     }
    ]

我编写了以下 N1QL 查询并得到以下结果

查询

SELECT disTINCT ARRAY {V.ordrqty,V.Plainqty} FOR V IN M.SaleDt1 WHEN V.ordrqty IN [120] END
FROM `trans-data` AS T
UNnesT Mflnitmlst as M
WHERE t.Sectn="XYZ"

结果:

[{
    "$1": []
  },{
    "$1": [{
      "ordrqty": 120,"Plainqty": "2000"
    }]
  },{}
]

现在我想在不使用 UNnesT 函数的情况下进行查询。有人可以帮忙吗?

解决方法

根据您的条件构造新数组

SELECT  ARRAY_DISTINCT(ARRAY_FLATTEN(ARRAY (ARRAY {s.ordrqty,s.Plainqty}
                                            FOR s IN m.SaleDt1
                                            WHEN s.ordrqty IN [120]
                                            END)
                                     FOR m IN t.Mflnitmlst
                                     END,1) ) AS orders
FROM `trans-data` AS t
WHERE t.Sectn="XYZ"
      AND (ANY m IN t.Mflnitmlst
           SATISFIES (ANY s IN m.SaleDt1
                     SATISFIES s.ordrqty IN [120]
                     END)
           END);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。