0
  1. 第一次使用管理文档dls:document-insert-and-manage
  2. 使用更新相同的文档xdmp:document-insert
  3. 文档从 dls 最新版本集合中丢失 cts:search(/scopedIntervention/id , dls:documents-query())

  4. 第一次管理文件

    <scopedIntervention>
      <id>someId12345</id>
      <scopedInterventionName>
        First Name
      </scopedInterventionName>
      <forTestOnly>
        true
      </forTestOnly>
      <inactive>
        true
      </inactive>
    </scopedIntervention>)```
    **Document inserted with versioning**
    
  5. 验证文档是否存在于最新文档集合中

    cts:search(/scopedIntervention/id , dls:documents-query())

    管理的最新集合中存在的文档

  6. 更新同一个文档

    <scopedIntervention>
      <id>someId12345</id>
      <scopedInterventionName>
        Updated Name
      </scopedInterventionName>
      <forTestOnly>
        true
      </forTestOnly>
      <inactive>
        true
      </inactive>
    </scopedIntervention>)```
    
    **Update document to same URI using xdmp:document-insert**
    
  7. 再次验证文档是否存在于最新的文档集合中

    cts:search(/scopedIntervention/id , dls:documents-query())

    管理的最新集合中不存在文档(从集合中丢失)

使用以下升级步骤应用 DLS 包后,相同的文档显示在列表中 ```xquery version "1.0-ml"; 在“/MarkLogic/dls.xqy”处导入模块命名空间 dls = “ http://marklogic.com/xdmp/dls ”;

dls:set-upgrade-status(fn:false()),
dls:start-upgrade(),
fn:doc("http://marklogic.com/dls/upgrade-task-status.xml"),
dls:latest-validation-results(),
dls:set-upgrade-status(fn:true())```
4

2 回答 2

1
  1. 使用 xdmp:document-insert 更新同一个文档

您很可能会在此步骤中删除 DLS 最新集合。此外,执行此操作时不会保留版本历史记录。

而不是使用 xdmp:document-insert 您应该使用dls:document-checkout-update-checkin

于 2019-07-19T15:05:11.120 回答
0

请阅读到最后——如果您没有对升级的 ML 版本进行 DLS 升级——请立即停止并按照升级说明进行操作。不这样做会使 DLS 处于不稳定状态,并且您所做的任何其他事情都会使事情更难修复。

+1 抢。@IAM,不管它在 V7 中是否“有效”或似乎“有效”,dls 的设计目的不是处理您描述的情况。DLS 架构依赖于在签入/签出语义中封装对文档的所有更改。绕过它,您不妨完全绕过 DLS,因为它不起作用。它在 V7 中“工作”的事实是用词不当,它可能没有以您的应用程序关心的方式表现不正确,或者您的代码可能巧合地完成了与内部类似的工作。您可能会很幸运并再次找到这样做的方法,但我鼓励您考虑如何在库的定义行为中工作,或者重构代码中不“DLS 友好”的部分

作为迁移解决方法,您可能能够持续使用添加到 dls 的升级功能。请参阅https://docs.marklogic.com/dls:start-upgrade
在 V9(我相信)中,对需要运行此代码的 DLS 内部进行了重大的非向后兼容更改。一次 假设是从先前的 DLS 到当前的就地更新。但是,代码也可能会持续工作,具体取决于 DLS 代码不知道的应用程序代码正在做什么的详细信息。“新”DLS 代码添加了一个内部集合,以优化搜索“最新”文档的常见情况——如果删除,那么这些文档将不会显示在 DLS 搜索中(对于“最新”)。

您提到您的代码是“迁移脚本”-> 如果这些是从 V7 迁移到 V10,那么您可以在 V10 更新之前运行您的代码然后运行 ​​V10 更新,然后运行 ​​dls-upgrade。之后,文档应该处于良好状态——只要您不做任何其他未为托管文档定义的行为。

于 2019-08-02T01:46:53.357 回答