Тайм-аут для цикла в XQuery MarkLogic - PullRequest
0 голосов
/ 22 октября 2018

У меня есть большая коллекция около 1 миллиона документов в MarkLogic (версия 9) со структурой ниже:

<File>
    <Id></Id>
    <ModifiedAt></ModifiedAt>
    <Author></Author>
    <Title></Title>
</File>

И мне нужно перебрать всю коллекцию и заменить пространство из ModifiedAt на Tдля всех документов

Пример документа:

     <File>
         <Id>12121</Id>
         <ModifiedAt>2011-06-08 14:29:29.000</ModifiedAt>
         <Author>Test</Author>
         <Title>Test</Title>
    </File>

Поле ModifiedAt должно стать: 2011-06-08T14: 29: 29.000

Код выглядит так:

for $doc in fn:collection('File')
    return xdmp:node-replace($doc/File/ModifiedAt,<ModifiedAt>{fn:replace($doc/File/ModifiedAt,' ','T')}</ModifiedAt>)

Проблема в том, что этот код возвращает время ожидания.

Я предполагаю, что есть более элегантный способ сделать это изменение для всей коллекции, и, возможно, у кого-то есть подсказка.

Спасибовы!

1 Ответ

0 голосов
/ 23 октября 2018

Существуют различные внешние инструменты, такие как Corb2 и MLCP , которые могут быть использованы для этого, но вы также можете выполнять как временную, так и менее специальную работу изнутри MarkLogic.Все, что вам по сути нужно сделать, - это выполнять обработку партиями.Taskbot очень полезен для этого:

https://github.com/mblakele/taskbot

HTH!

...