基于marklogic中的元素返回最新文档

时间:2018-04-05 17:15:08

标签: xquery marklogic

有一个包含4个文件的集合。我想检索带有最新时间戳的文档。

以下查询有助于按降序排序,但我想要最新修改的文​​档

 for $doc in fn:collection("/test")
 order by $doc//timestamp descending
 return $doc//id/text(),",",$doc//timestamp/text())

输出

1234, 2018-03-05T11:29:42.722Z
 5678,2018-03-05T11:29:42.715Z
 8976,2018-02-05T11:28:42.710Z
 8976,2018-02-04T11:28:42.716Z

1 个答案:

答案 0 :(得分:2)

你的for循环已经生成了一个序列,所以你需要做的就是拿第一个项目。因此,您最终不会查询您不想要的文档的值,将查询的输出呈现部分移动到单独的表达式中。

let $latest :=
  (for $doc in fn:collection("/test")
  order by $doc//timestamp descending
  return $doc)[1]
return $latest//id/text(),",",$latest//timestamp/text())

现在,如果类型为timestamp的{​​{1}}上存在范围索引,则可以选择最新的文档,而无需先将所有这些文档加载到内存中并进行排序。但是,您可能必须将xs:dateTime替换为$doc//timestamp(无双斜杠),以便查询优化器自动使用范围索引。