【问题标题】:Best way to delete documents in marklogic which are having multiple version删除marklogic中具有多个版本的文档的最佳方法
【发布时间】:2019-11-11 16:21:32
【问题描述】:

我们在数据库中有多个版本的文档。例如 文档 URI 如下所示:-

/PremierLeague/Manutd/players.xml-version-2
/PremierLeague/Manutd/players.xml-version-3
/PremierLeague/Manutd/players.xml-version-4
.
.
.
.
.
/PremierLeague/Manutd/players.xml-version-998
/PremierLeague/Manutd/players.xml-version-999
/PremierLeague/Manutd/players.xml-version-1000

我们需要找到所有这样的文档的计数,然后删除所有高于“.version-20”的文档版本。

例如

/PremierLeague/Manutd/players.xml-version-19 --> NOT DELETE
/PremierLeague/Manutd/players.xml-version-20 --> NOT DELETE 
/PremierLeague/Manutd/players.xml-version-21 --> TO BE DELETED
/PremierLeague/Manutd/players.xml-version-22 --> TO BE DELETED
.
.
.
.
/PremierLeague/Manutd/players.xml-version-999 --> TO BE DELETED
/PremierLeague/Manutd/players.xml-version-1000 --> TO BE DELETED

我们有多个目录,其中存在多个文档。 截至目前,我们正在统计如下文件

xquery version "1.0-ml";
fn:count(fn:doc("/PremierLeague/Manutd/players.xml-version-*"))

删除此类文档的最佳方法是什么?

【问题讨论】:

  • 您不想保留最新的版本,作为最后的数字吗?使用时间戳会更容易,并使用日期范围查询执行 cts:uris。这会是一个选择吗?
  • 感谢您的回复。我们使用xquery version "1.0-ml"; for $i in 1 to 980 return xdmp:document-delete('/PremierLeague/Manutd/players.xml-version-*'||$i||)

标签: xquery marklogic


【解决方案1】:

启用 uri 词典并使用 'uris' 或 'directory' 函数之一,如 cts:uris,而不是 fn:doc -- fn:doc '打开'文档并返回文档节点,而不是 uri。 当您删除文档时,您不想这样做。

小心选择的版本模式和要求——如前所述,您最终可能会删除 所有 版本,以及在被删除之前恰好包含子字符串“-version”的文档版本会不匹配(与您的示例代码)。

考虑管理文档版本(包括保留政策)的文档库服务。

【讨论】:

    猜你喜欢
    • 2016-05-08
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多