【问题标题】:How can I call op.arrayAggregate method to return multiple columns如何调用 of.array Aggregate 方法返回多列
【发布时间】:2022-01-21 14:52:30
【问题描述】:

我尝试按名称对以下响应进行分组:

{
  "document1": [
    {
      "row": {
        "schema": "Schemas",
        "view": "CustomerAddress",
        "data": {
          "rownum": "1",
          "CustomerName": "Name1",
          "AddrTypeCd": "MailingAddress",
          "Addr1": "911 FORBES AVE",
          "Addr2": "SUITE XXX",
          "CityName": "asdfasfd",
          "StateProvCd": "PA",
          "PostalCode": "15219"
        }
      }
    },
    {
      "row": {
        "schema": "Schemas",
        "view": "CustomerAddress",
        "data": {
          "rownum": "2",
          "CustomerName": "Name1",
          "AddrTypeCd": "OfficeAddress",
          "Addr1": "911 Watson AVE",
          "Addr2": "SUITE XXX",
          "CityName": "asdfasfd",
          "StateProvCd": "CT",
          "PostalCode": "15119"
        }
      }
    }
  ],
  "document2": []
}

我是这样用arrayAggregate方法的

.groupBy(customerAddreses.col('CustomerName'), 
         op.arrayAggregate("Customer addresses", customerAddreses.col('Addr1')))

我当前的响应数据如下所示:

{
"schemas.customerAddreses.CustomerName": "Name1", 
"Customer addresses": [
   "911 FORBES AVE", 
   "911 Watson AVE"
 ]
}

是否可以使用多列调用arrayAggregate 并在客户地址数组中接收对象?以下是我想要获得的回复:

{
    "schemas.customerAddreses.CustomerName": "Name1",
    "Customer addresses": [
        {
            "Addr1": "911 FORBES AVE",
            "Addr2": "SUITE XXX",
            "CityName": "asdfasfd",
            "StateProvCd": "PA",
        },
        {
            "Addr1": "911 Watson AVE",
            "Addr2": "SUITE XXX",
            "CityName": "asdfasfd",
            "StateProvCd": "CT"
        }
    ]
}

【问题讨论】:

  • 您能否给出您希望生成的输出的准确示例?
  • 嗨。我认为您的样本不正确 - 它似乎只是将客户 1 的一部分重复了两次..
  • 对,现在可以了:)

标签: marklogic marklogic-9 marklogic-10


【解决方案1】:

输入

{
    "document1": [
        {
            "data": {
                "rownum": "1",
                "CustomerName": "Name1",
                "AddrTypeCd": "MailingAddress",
                "Addr1": "911 FORBES AVE",
                "Addr2": "SUITE XXX",
                "CityName": "asdfasfd",
                "StateProvCd": "PA",
                "PostalCode": "15219"
            }
        },
        {
            "data": {
                "rownum": "2",
                "CustomerName": "Name1",
                "AddrTypeCd": "OfficeAddress",
                "Addr1": "911 Watson AVE",
                "Addr2": "SUITE XXX",
                "CityName": "asdfasfd",
                "StateProvCd": "CT",
                "PostalCode": "15119"

            }
        }
    ]
}

JavaScript 光学

op.fromView('main', 'CustomerAddress')
    .select(['Addr1',
             'Addr2',
             'CityName',
             'StateProvCd',
             'CustomerName',   
              op.as('addrAggr', op.jsonObject([
                op.prop('Addr1', op.col('Addr1')),
                op.prop('Addr2',  op.col('Addr2')),
                op.prop('CityName', op.col('CityName')),
                op.prop('StateProvCd', op.col('StateProvCd'))
              ]))
          ])
    .orderBy(op.asc('Addr1'))   //Line14
    .groupBy('CustomerName', op.arrayAggregate("Customer addresses", "addrAggr"))
    .result();

结果

{
    "CustomerName": "Name1", 
    "Customer addresses": [
        {
            "Addr1": "911 FORBES AVE", 
            "Addr2": "SUITE XXX", 
            "CityName": "asdfasfd", 
            "StateProvCd": "PA"
        }, 
        {
            "Addr1": "911 Watson AVE", 
            "Addr2": "SUITE XXX", 
            "CityName": "asdfasfd", 
            "StateProvCd": "CT"
        }
    ]
}

注意

  1. 您的 TDE 视图名称之一是 CustomerAddress,而另一个是 customerAddreses。不知道你怎么能得到任何结果。
  2. 要镜像类似SQL的ORDER,请在Optic中添加sort子句(Line14)。
  3. JSON 根属性名称应保持一致。也许,address 而不是 document1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多