Как получить максимальное значение элемента, используя cts: values ​​в MarkLogic? - PullRequest
0 голосов
/ 30 августа 2018

Я хочу получить максимальное значение <ID> из всех документов, представленных в базе данных.

Образец документа -

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

Подход, который я попробовал, как показано ниже -

  1. Я создал пространство имен пути с префиксом sa с помощью uri http://marklogic.com/sample.

  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]

Но это дает мне пустую последовательность. Не уверен, что мне здесь не хватает.

Любые предложения ??

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Попробуйте передать карту с привязками пространства имен в качестве третьего аргумента 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")
    ))

Надеясь, что помогает,

0 голосов
/ 30 августа 2018

По предложению Elijah Bernstein-Cooper Я просто добавил пространство имен xmlns="http://marklogic.com/sample" в общий доступ к xml и добавил несколько файлов xml в базу данных.

Создал пространство имен пути, индекс диапазона пути и запустил запрос общего cts, и он отлично работал, поэтому Elijah правильно, вам просто нужно указать пространство имен в xml.

Небольшое изменение в вашем запросе в выражении declare namespace, префикс будет sa, а не es.

надеюсь, это поможет.

...