我有以下示例輸入:(它們是單獨的檔案)
<performance>
<year>2016</year>
<industry>Financials</industry>
<benchmark>Healthcare</benchmark>
</performance>
<performance>
<year>2017</year>
<industry>Technology</industry>
<benchmark>Financials</benchmark>
</performance>
<performance>
<year>2018</year>
<industry>Technology</industry>
<benchmark>Financials</benchmark>
</performance>
<performance>
<year>2019</year>
<industry>Financials</industry>
<benchmark>Materials</benchmark>
</performance>
<performance>
<year>2020</year>
<industry>Technology</industry>
<benchmark>Materials</benchmark>
</performance>
<performance>
<year>2021</year>
<industry>Technology</industry>
<benchmark>Healthcare</benchmark>
</performance>
我需要找到行業和基準對,按年份對結果檔案進行排序,最后將這些對轉換為 JSON。我想使用 Marklogic 的索引來加速搜索和轉換。預期的輸出是:
{
"Financials": [
"Materials",
"Healthcare"
],
"Technology": [
"Healthcare",
"Materials",
"Financials"
]
}
我的 Xquery 代碼:
let $keys := ('Financials', 'Technology')
let $map := map:map()
let $_ :=
for $key in $keys
let $query := cts:path-range-query("/performance/industry", "=", $key)
let $v := cts:values(cts:path-reference('/performance/benchmark'), (), (), $query)
return map:put($map, $key, $v)
return xdmp:to-json($map)
意外輸出:
{
"Financials":[
"Healthcare",
"Materials"
],
"Technology":[
"Financials",
"Healthcare",
"Materials"
]
}
我是否以錯誤的方式使用 Xquery 或誤解了 Marklogic 索引的作業原理?我怎樣才能得到正確的輸出?我對 Javascript 或 Xquery 沒問題。
uj5u.com熱心網友回復:
似乎當您將一系列值放入地圖時,它們最終會被排序。
使用此解決方案,我獲取所有benchmark和year對于每個industry,按descending順序對值進行排序 by year,重復資料洗掉,distinct-values()然后將它們放入 anarray-object()以保持排序順序。
let $map := map:map()
let $industries := ('Financials', 'Technology')
let $_ :=
for $industry in $industries
let $query := cts:path-range-query("/performance/industry", "=", $industry)
let $tuples := cts:value-tuples((cts:path-reference('/performance/benchmark'), cts:path-reference('/performance/year')), (), $query)
let $sorted-values :=
for $tuple in $tuples
let $benchmark := $tuple[1]
let $year := $tuple[2]
order by $year descending
return $benchmark
return map:put($map, $industry, array-node{ distinct-values($sorted-values) })
return xdmp:to-json($map)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/387256.html
