使用cts:marklogic中的collection-match限制结果

时间:2018-04-13 15:58:02

标签: xquery marklogic

我在馆藏中有2个馆藏。

  • /测试/ 1

这有10个id为

的文件
test1_1
test1_2
.....
test1_10
  • /测试/ 2

这有20个文件,ID如下

test2_1
test2_2
.....
test2_20

查询:

let $result := cts:collection-match("/test/*")
let $id :=(
  fn:distinct-values(
    for $doc in fn:collection(result)
    order by $doc//timestamp descending
    return $doc//timestamp/text()
  )[1 to 5]
)
return $id

我想从每个集合中返回前5个文档时间戳的降序,但它只返回5个文档而不是10个,即每个集合的前5个

1 个答案:

答案 0 :(得分:2)

$result是一个包含多个项目的序列时,写for $doc in fn:collection($result)会将多个集合中的所有文档聚合到一个序列中。您需要首先迭代集合,然后迭代每个集合中的值,有序和有限。

let $collections := cts:collection-match("/test/*")
let $id :=         
    for $collection in $collections
    return 
      fn:distinct-values(
        for $doc in fn:collection($collection)
        order by $doc//timestamp descending
           return $doc//timestamp/string()
      )[1 to 5]
return $id