Optic API:如何使用分隔符(逗号)将字符串拆分为单独的行

问题描述 投票:0回答:1

我的光学查询返回一行,其中有一列名为“activeIngredient”,其中包含以逗号分隔的 ID 列表。查看下面的 JSON。

[
    {
        "productId": 1234567899,
        "productName": "Test Product",
        "languageCode": "EN",
        "activeIngredient": "24622176,37690963,78121460",
        "updatedDate": "2021-08-12T10:42:21.6181006Z"
    }
]

我需要通过使用逗号来创建单独的行来分解“activeIngredient”中的 id。

我尝试使用

op:map
并循环遍历它,但它一直为我提供每行的最后一个 id,即 78121460。

这就是我希望输出的显示方式。

[
    {
        "productId": 1234567899,
        "productName": "Test Product",
        "languageCode": "EN",
        "activeIngredient": "24622176",
        "updatedDate": "2021-08-12T10:42:21.6181006Z"
    },
    {
        "productId": 1234567899,
        "productName": "Test Product",
        "languageCode": "EN",
        "activeIngredient": "37690963",
        "updatedDate": "2021-08-12T10:42:21.6181006Z"
    },
    {
        "productId": 1234567899,
        "productName": "Test Product",
        "languageCode": "EN",
        "activeIngredient": "78121460",
        "updatedDate": "2021-08-12T10:42:21.6181006Z"
    }
]

我真的很感谢您提供的任何帮助。

marklogic marklogic-10 marklogic-optic-api
1个回答
0
投票

您可以使用

op:bind()
修改
activeIngredient
列并将其从 CSV 更改为标记化的值集,然后使用
op:unnest-inner()
为每个值生成一行:

xquery version "1.0-ml";
import module namespace op="http://marklogic.com/optic"
     at "/MarkLogic/optic.xqy";
import module namespace ofn="http://marklogic.com/optic/expression/fn"
     at "/MarkLogic/optic/optic-fn.xqy";

op:from-literals(
  map:new()
  => map:with("productId", 1234567899)
  => map:with("productName", "Test Product")
  => map:with("languageCode", "EN")
  => map:with("activeIngredient", "24622176,37690963,78121460")
  => map:with("updatedDate", "2021-08-12T10:42:21.6181006Z")
) 
=> op:bind((
     op:as("activeIngredient",  ofn:tokenize(op:col("activeIngredient"),  ","))
   ))
=> op:unnest-inner('activeIngredient','activeIngredient')   
=> op:result()

产生:

语言代码 产品名称 更新日期 活性成分 产品ID
CN 测试产品 2021-08-12T10:42:21.6181006Z 24622176 1234567899
CN 测试产品 2021-08-12T10:42:21.6181006Z 37690963 1234567899
CN 测试产品 2021-08-12T10:42:21.6181006Z 78121460 1234567899
© www.soinside.com 2019 - 2024. All rights reserved.