You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MarkLogic跨库复制文档后如何删除成功内容并留存失败文档

MarkLogic跨库复制后按复制结果删除源文档方案

核心实现思路

通过异常捕获机制区分复制成功/失败的文档:

  • 跨库插入操作正常执行无报错时,判定为复制成功,删除源库对应文档
  • 跨库插入抛出异常(包括目标库模板校验失败、规则冲突等所有插入阶段错误)时,判定为复制失败,保留源库对应文档,同时收集失败文档URI供后续排查

修改后可用的XQuery代码

xquery version "1.0-ml";
let $target-db := "STAGING"
(: 初始化成功、失败文档URI列表 :)
let $success-list := ()
let $fail-list := ()
let $invoke-opts := 
  <options xmlns="xdmp:eval">
    <database>{xdmp:database($target-db)}</database>
    <commit>auto</commit>
    <isolation>different-transaction</isolation>
  </options>
let $process-result :=
  for $doc in cts:search(doc(), cts:collection-query('Collection1'))
  let $doc-uri := $doc/base-uri()
  let $doc-collections := xdmp:document-get-collections($doc-uri)
  let $doc-permissions := xdmp:document-get-permissions($doc-uri)
  let $insert-opts := 
    <options xmlns="xdmp:document-insert">  
      <permissions>{$doc-permissions}</permissions>
      <collections>
        <collection>{$doc-collections}</collection>
      </collections> 
    </options>
  return
    try {
      (: 执行跨库插入 :)
      xdmp:invoke-function(
        function() { xdmp:document-insert($doc-uri, $doc, $insert-opts) },
        $invoke-opts
      ),
      (: 插入成功则删除源文档,记录成功URI :)
      xdmp:document-delete($doc-uri),
      $success-list := ($success-list, $doc-uri)
    } catch ($err) {
      (: 任意插入错误(含模板错误)都记录失败URI,不删除源文档 :)
      $fail-list := ($fail-list, $doc-uri)
    }
return
  <copy-result>
    <total-processed>{count($success-list) + count($fail-list)}</total-processed>
    <success-count>{count($success-list)}</success-count>
    <failed-count>{count($fail-list)}</failed-count>
    <failed-document-uris>{$fail-list}</failed-document-uris>
  </copy-result>

关键配置说明

  • 跨库调用选项中添加<isolation>different-transaction</isolation>,保证目标库插入事务和源库删除事务完全独立,不会出现目标端插入回滚但源端误删文档的问题
  • catch块会捕获插入阶段所有类型的异常,不需要单独枚举模板相关的错误码,只要插入流程报错就会自动留存源文档
  • 脚本执行完成后返回结果中的<failed-document-uris>节点就是所有复制失败的文档列表,可直接用于排查目标库模板配置问题

内容的提问来源于stack exchange,提问作者Rashmita Purkayastha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:45:35