我试图根据一种模式批量删除文档,但由于集合包含超过500K个文档,forloop似乎挂起了.下面是我的代码:

for (const uri of cts.uris("", null, cts.jsonPropertyValueQuery("source", "survey"))) {
  xdmp.documentDelete(uri);
}

有人能帮我找到一个更好的方法来删除MarkLogic中的文档吗?

推荐答案

试图通过"煮沸海洋"类型的查询在单个事务中修改一组非常大的文档,可能会遇到执行时间、事务大小、扩展树缓存等方面的限制.

最好把工作分成更小的单元.

一种简单的方法是将工作生成多个事务,这些事务在任务服务器上执行.在XQuery with xdmp:spawn-function()中可以很容易地做到这一点(不幸的是,SJS中没有等效的函数):

xquery version "1.0-ml";
for $URI in cts:uris("", (), cts:json-property-value-query("source", "survey"))
return xdmp:spawn-function(function(){ xdmp:document-delete($URI) })

您可以修改上面的代码来删除URI的子集,而不是一次删除一个子集.但是,这些删除事务应该执行得非常快(并且对于任务服务器配置的线程数并行),因此可能不值得花更多的时间编写更复杂的代码.

另一种 Select 是使用批处理工具,例如CoRB

Javascript相关问答推荐

React 17与React 18中的不同setState行为

如何禁用附加图标点击的v—自动完成事件

切换时排序对象数组,切换不起作用

当点击注册页面上的注册按钮时,邮箱重复

在我的html表单中的用户输入没有被传送到我的google表单中

我怎么才能得到Kotlin的密文?

Chart.js-显示值应该在其中的引用区域

如何修复我的数据表,以使stateSave正常工作?

搜索功能不是在分页的每一页上进行搜索

如何在DYGRAPS中更改鼠标事件和键盘输入

匹配一个或多个可选重复的特定模式

用于测试其方法和构造函数的导出/导入类

调用特定数组索引时,为什么类型脚本不判断未定义

如何处理不带参数的redux thunk payloadCreator回调函数?

由于http.get,*ngIf的延迟很大

Reaction:从子组件调用父组件中的函数

在两个数组范围中输入日期范围

当触发AJAX POST请求时,绕过对PHP生成的表的加载函数

V-如果使用数组[vue3]中的布尔结果

React rebuild c不会触发rerender