return 基于 marklogic 元素的最新文档
return latest document based on a element in 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
您的 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
上有 xs:dateTime
类型的范围索引,您可以 select 最新的文档,而无需先将所有这些文档加载到内存中并进行排序。但是,您可能必须将 $doc//timestamp
替换为 $doc/path/to/timestamp
(不是 double-slash),以便查询优化器自动使用范围索引。
有一个包含 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
您的 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
上有 xs:dateTime
类型的范围索引,您可以 select 最新的文档,而无需先将所有这些文档加载到内存中并进行排序。但是,您可能必须将 $doc//timestamp
替换为 $doc/path/to/timestamp
(不是 double-slash),以便查询优化器自动使用范围索引。