簡體   English   中英

如何在MarkLogic中使用cts:values獲得元素的最大值?

[英]How to get the maximum value of an element using cts:values in MarkLogic?

我想從數據庫中存在的所有文檔中獲取<ID>的最大值。

樣本文件

<root xmlns="http://marklogic.com/sample">
 <node>
  <ID>3253523</ID>
  <value1>.....</value1>
  <value2>.....</value2>
  <value3>.....</value3>
  <value4>.....</value4>
   .....................
 </node>
</root>

我嘗試的方法如下-

  1. 我使用uri http://marklogic.com/sample創建了前綴為sa的路徑名稱空間。

  2. 創建了一個類型為int的路徑范圍索引,其路徑為/sa:root/sa:node/sa:ID

3.嘗試使用以下代碼從數據庫中獲取最大值:

declare namespace sa = "http://marklogic.com/sample"; (cts:values(cts:path-reference('/sa:root/sa:node/sa:ID'), (), "descending"))[1]

但這給了我一個空序列。 不知道我在這里想念什么。

有什么建議么 ??

嘗試將帶有名稱空間綁定的映射作為第三個參數傳遞給cts:path-reference() 請參閱: http//docs.marklogic.com/ctspath-reference

順便說一句, cts:max()可能是從范圍索引中獲取最大值的最有效方法。 請參閱: http//docs.marklogic.com/ctsmax

該方法類似於以下片段:

cts:max(
    cts:path-reference('/sa:root/sa:node/sa:ID', (),
        map:entry("sa", "http://marklogic.com/sample")
    ))

希望能有所幫助,

Elijah Bernstein-Cooper所建議,我只是在您共享的xml中添加了xmlns="http://marklogic.com/sample"命名空間,並在數據庫中插入了一些xml文件。

創建了路徑名稱空間,路徑范圍索引,並運行了共享的cts查詢,它運行良好,因此Elijah是正確的,您只需要在xml中指定名稱空間即可。

在查詢中的小變化是在declare namespace聲明,前綴將saes

希望這可以幫助。

暫無
暫無

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

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