我想从数据库中存在的所有文档中获取<ID>
的最大值。
示例文档-
<root xmlns="http://marklogic.com/sample">
<node>
<ID>3253523</ID>
<value1>.....</value1>
<value2>.....</value2>
<value3>.....</value3>
<value4>.....</value4>
.....................
</node>
</root>
我尝试过的方法如下-
我用uri http://marklogic.com/sample
创建了一个前缀为sa的路径名称空间。
创建了一个类型为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]
但这给了我一个空的序列。不知道我在这里想念什么。
任何建议??
答案 0 :(得分:2)
尝试将带有名称空间绑定的地图作为第三个参数传递给cts:path-reference()
。参见:http://docs.marklogic.com/cts:path-reference
顺便说一句,cts:max()
可能是从范围索引中获取最大值的最有效方法。参见:http://docs.marklogic.com/cts:max
该方法类似于以下片段:
cts:max(
cts:path-reference('/sa:root/sa:node/sa:ID', (),
map:entry("sa", "http://marklogic.com/sample")
))
希望有帮助,
答案 1 :(得分:1)
根据Elijah Bernstein-Cooper
的建议
我刚刚在您共享的xml中添加了xmlns="http://marklogic.com/sample"
名称空间,并在数据库中插入了一些xml文件。
创建了路径名称空间,路径范围索引并运行了共享的cts查询,并且运行良好,因此Elijah
是正确的,您只需要在xml中指定名称空间即可。
查询中的小变化是在declare namespace
语句中,前缀将是sa
而不是es
。
希望这会有所帮助。