dls:document-insert-and-manage
xdmp:document-insert
文档从dls最新版本集合cts:search(/scopedIntervention/id , dls:documents-query())
首次管理文档
<scopedIntervention>
<id>someId12345</id>
<scopedInterventionName>
First Name
</scopedInterventionName>
<forTestOnly>
true
</forTestOnly>
<inactive>
true
</inactive>
</scopedIntervention>)```
**Document inserted with versioning**
验证文档是否存在于最新文档集中
cts:search(/scopedIntervention/id , dls:documents-query())
文档包含在托管的最新收藏集中
更新同一文档
<scopedIntervention>
<id>someId12345</id>
<scopedInterventionName>
Updated Name
</scopedInterventionName>
<forTestOnly>
true
</forTestOnly>
<inactive>
true
</inactive>
</scopedIntervention>)```
**Update document to same URI using xdmp:document-insert**
再次验证文档是否在最新文档集中
cts:search(/scopedIntervention/id , dls:documents-query())
托管的最新收藏集中不存在文档(从收藏集中丢失)
使用以下升级步骤应用DLS软件包后,列表中会显示相同的文档 xquery版本“ 1.0-ml”; 导入模块名称空间dls =“ http://marklogic.com/xdmp/dls” 在“ /MarkLogic/dls.xqy”处;
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())```
答案 0 :(得分:1)
- 使用xdmp:document-insert更新相同的文档
您很可能在此步骤中删除“ DLS最新”收藏集。此外,执行此操作时不会保留版本历史记录。
应该使用dls:document-checkout-update-checkin来代替xdmp:document-insert。
答案 1 :(得分:0)
请仔细阅读-如果您没有在升级的ML版本上进行DLS升级-请立即停止并按照升级说明进行操作。否则将使DLS处于不稳定状态,并且您进行的其他任何操作都会使维修变得更加困难。
+1抢夺。 @IAM,不管它在V7中是否“起作用”或看上去“起作用”,dls都不旨在处理您描述的情况。 DLS体系结构依赖于将所有对文档的更改封装在签入/签出语义内。绕过它,您最好完全绕过DLS,因为它不起作用。它在V7中“正常工作”是一个错误的说法,它可能不会以您的应用关心的方式表现不正确,或者您的代码可能恰好完成了与内部构件类似的工作。您可能会很幸运,并且找到了再次这样做的方法,但是我鼓励您考虑如何在库的定义行为内工作,或者重构代码中那些不“ DLS友好”的部分以便在结帐之间进行操作/ checkin窗口-并非所有更新都必须是checkout-update-checkin-您可以签出-做任何事情-然后签入。
作为迁移解决方案,您可以持续使用添加到dls中的升级功能。
参见https://docs.marklogic.com/dls:start-upgrade
在V9(我相信)中,对需要运行此代码的DLS内部进行了重大的非向后兼容更改。 一次
该假设是从先前DLS到当前的就地更新。但是,代码也可能会持续工作,这取决于DLS代码不知道的应用程序代码的确切执行细节。
“新” DLS代码添加了一个内部集合,以优化搜索“最新”文档的常见情况-如果删除该文档,则这些文档将不会在DLS搜索(“最新”)中显示。
您提到您的代码是“迁移脚本”->如果这些代码是从V7迁移到V10,则可以在V10更新之前运行,然后运行V10更新,然后运行dls -升级。之后,文档应处于良好状态-只要您不做任何其他未定义托管文档行为的操作即可。