簡體   English   中英

根據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())

現在,如果在xs:dateTime類型的timestamp上存在范圍索引,則可以選擇最新文檔,而無需先將所有這些文檔加載到內存中並進行排序。 但是,您可能必須將$doc//timestamp替換$doc//timestamp $doc/path/to/timestamp (沒有雙斜杠),查詢優化器才能自動使用范圍索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM