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

如何用XQuery在MarkLogic中筛选数组全匹配的文档编号?

在MarkLogic中使用XQuery筛选满足数组全包含条件的文档编号

需求:筛选文档的编号(no字段),要求文档的arrayList数组中所有元素都存在于查询参数的BookArray数组内。

查询参数示例(修正语法后)

{
  "list": {
    "bookNo": 13,
    "BookArray": [20,21,22,23,24,25]
  }
}

样本数据示例(修正语法后)

{
  "no": "01",
  "arrayList": [20,25]
}
{
  "no": "02",
  "arrayList": [20,27]
}
{
  "no": "03",
  "arrayList": [20,23,25]
}

解决方案XQuery代码

xquery version "1.0-ml";

(: 1. 定义或获取查询参数:如果是从HTTP请求获取,可替换为xdmp:get-request-body()解析 :)
let $query-params := 
  fn:parse-json('{
    "list": {
      "bookNo": 13,
      "BookArray": [20,21,22,23,24,25]
    }
  }')
let $allowed-books := $query-params?list?BookArray

(: 2. 遍历目标文档,筛选符合条件的编号 :)
for $doc in collection("/your-target-collection") (: 替换为实际文档集合路径 :)
let $doc-no := $doc?no
let $doc-array := $doc?arrayList
where every $item in $doc-array satisfies $item = $allowed-books
return $doc-no

代码说明

  • 核心条件:every $item in $doc-array satisfies $item = $allowed-books 用于校验文档数组的所有元素都属于允许的书籍列表,这是实现"全包含"判断的关键。
  • 参数获取:如果查询参数来自外部请求,可使用xdmp:get-request-body()获取请求体后解析,替换示例中硬编码的$query-params。
  • 文档选择:将collection("/your-target-collection")替换为存储样本数据的实际集合路径,也可根据需求改用cts:search等更高效的查询方式。

预期输出

"01"
"03"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:45:43