You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改MarkLogic XQuery代码实现按序号指定返回主机名

解决方案

方法一:直接利用序列下标(最简洁)

$hosts本身是有序序列,可以直接通过传入的序号作为下标获取对应主机名,无需额外构建map:

xquery version "1.0-ml";
declare variable $index as xs:integer external; <!-- 外部传入目标序号,比如1、3 -->

let $hosts := xdmp:host-name(xdmp:group-hosts(xdmp:group()))
return $hosts[$index]

调用时传入$index参数即可,比如传入3会直接返回序列中第3个主机名。


方法二:修正原有的Map实现(保留你的思路)

原代码中$i未在循环中递增,导致所有主机被存入同一个key下。先修正map的构建逻辑,再根据传入序号取值:

xquery version "1.0-ml";
declare variable $index as xs:integer external; <!-- 外部传入目标序号 -->

let $hosts := xdmp:host-name(xdmp:group-hosts(xdmp:group()))
let $map := map:map()
<!-- 循环构建序号到主机名的映射,$i从1开始递增 -->
for $i in 1 to count($hosts)
let $_ := map:put($map, xs:string($i), $hosts[$i])
return ()
<!-- 根据传入序号获取对应主机名 -->
return map:get($map, xs:string($index))

关键说明

  • 外部变量$index需要在调用时传入,比如通过MarkLogic的xdmp:eval或API请求传递参数。
  • XQuery的序列下标从1开始计数,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者Aviator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:55:09