xdmp:document-插入后,托管文档在 MarkLogic 10 中不起作用
Managed document not working in MarkLogic 10 after xdmp:document-insert
- 第一次使用
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())```
- Update the same document using xdmp:document-insert
您很可能在这一步删除了 DLS Latest 集合。此外,执行此操作时不会保留版本历史记录。
而不是使用 xdmp:document-insert 你应该使用 dls:document-checkout-update-checkin .
请阅读到最后 -- 如果您没有对升级后的 ML 版本执行 DLS 升级 - 请立即停止并按照升级说明进行操作。不这样做会使 DLS 处于不稳定状态,而您所做的任何其他事情都会使事情更难修复。
+1 抢。 @IAM,不管它是 'worked' 还是在 V7 中出现 'work',dls 并不是为了处理您描述的情况而设计的。 DLS 体系结构依赖于将对文档的所有更改封装在 checkin/checkout 语义中。绕过它,你还不如完全绕过 DLS,因为它不会工作。它在 V7 中是 'working' 的事实用词不当,它可能没有以您的应用程序关心的方式不正确地运行,或者您的代码可能巧合地完成了与内部结构足够相似的工作。您可能会很幸运并找到一种方法再次这样做,但我鼓励您考虑如何在库的定义行为内工作,或者重构代码中那些不 'DLS Friendly' 以在两者之间运行的部分checkout/checkin windows -- 并非所有更新都必须是签出-更新-签入 -- 您可以签出 -- 做任何事 -- 然后签入。
作为迁移解决方法,您可以持续使用添加到 dls 的升级功能。
参见 https://docs.marklogic.com/dls:start-upgrade
在 V9 中(我相信),对需要 运行 宁此代码的 DLS 内部进行了重大的非向后兼容更改。 一次
假设是从以前的 DLS 到当前的就地更新。然而,代码也可能碰巧持续工作,具体取决于 DLS 代码不知道的应用程序代码正在执行的操作的详细信息。
'new' DLS 代码添加了一个内部集合来优化搜索 'latest' 文档的常见情况——如果它被删除,那么这些文档将不会出现在 DLS 搜索中(对于 'latest') .
你提到你的代码是 'migration scripts' --> 如果这些是从 V7 迁移到 V10 那么你可以 运行 你的代码 在 V10 更新之前,然后 运行 V10 更新然后 运行 dls 升级。之后文档应该处于良好状态 - 只要您不执行任何其他未为托管文档定义的行为。
- 第一次使用
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())```
- Update the same document using xdmp:document-insert
您很可能在这一步删除了 DLS Latest 集合。此外,执行此操作时不会保留版本历史记录。
而不是使用 xdmp:document-insert 你应该使用 dls:document-checkout-update-checkin .
请阅读到最后 -- 如果您没有对升级后的 ML 版本执行 DLS 升级 - 请立即停止并按照升级说明进行操作。不这样做会使 DLS 处于不稳定状态,而您所做的任何其他事情都会使事情更难修复。
+1 抢。 @IAM,不管它是 'worked' 还是在 V7 中出现 'work',dls 并不是为了处理您描述的情况而设计的。 DLS 体系结构依赖于将对文档的所有更改封装在 checkin/checkout 语义中。绕过它,你还不如完全绕过 DLS,因为它不会工作。它在 V7 中是 'working' 的事实用词不当,它可能没有以您的应用程序关心的方式不正确地运行,或者您的代码可能巧合地完成了与内部结构足够相似的工作。您可能会很幸运并找到一种方法再次这样做,但我鼓励您考虑如何在库的定义行为内工作,或者重构代码中那些不 'DLS Friendly' 以在两者之间运行的部分checkout/checkin windows -- 并非所有更新都必须是签出-更新-签入 -- 您可以签出 -- 做任何事 -- 然后签入。
作为迁移解决方法,您可以持续使用添加到 dls 的升级功能。
参见 https://docs.marklogic.com/dls:start-upgrade
在 V9 中(我相信),对需要 运行 宁此代码的 DLS 内部进行了重大的非向后兼容更改。 一次
假设是从以前的 DLS 到当前的就地更新。然而,代码也可能碰巧持续工作,具体取决于 DLS 代码不知道的应用程序代码正在执行的操作的详细信息。
'new' DLS 代码添加了一个内部集合来优化搜索 'latest' 文档的常见情况——如果它被删除,那么这些文档将不会出现在 DLS 搜索中(对于 'latest') .
你提到你的代码是 'migration scripts' --> 如果这些是从 V7 迁移到 V10 那么你可以 运行 你的代码 在 V10 更新之前,然后 运行 V10 更新然后 运行 dls 升级。之后文档应该处于良好状态 - 只要您不执行任何其他未为托管文档定义的行为。