我的光学查询返回一行,其中有一列名为“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"
}
]
我真的很感谢您提供的任何帮助。
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 |