如何删除在 MarkLogic 中创建的所有字段
How to delete all fields created in MarkLogic
我有一个要求,即需要删除现有字段。我找到了删除字段范围索引而不是字段的完美脚本。
所以,我写了这个工作正常的脚本,但我需要一个一个地传递每个字段名:
xquery version "1.0-ml";
import module namespace admin = "http://marklogic.com/xdmp/admin"
at "/MarkLogic/admin.xqy";
let $config := admin:get-configuration()
let $dbid := xdmp:database("testDB")
let $fields := admin:database-get-fields($config,$dbid)
for $each in $fields
let $config := admin:database-delete-field($config, $dbid,$each/*:field-name/fn:string())
return admin:save-configuration($config)
还有其他人对此有更好的解决方案吗?这样我们就可以直接传字段就搞定了
函数admin:database-delete-field()接受多个字段名,所以你可以跳过FLWOR:
xquery version "1.0-ml";
import module namespace admin = "http://marklogic.com/xdmp/admin"
at "/MarkLogic/admin.xqy";
let $config := admin:get-configuration()
let $dbid := xdmp:database("testDB")
let $fields := admin:database-get-fields($config,$dbid)
let $config := admin:database-delete-field($config, $dbid, $fields/*:field-name)
return admin:save-configuration($config)
就是说,如果您发现自己处于无法避免 FLWOR 的位置,请使用 xdmp:set 迭代更新 $config,并以单个保存配置结束。您的代码正在为每个 FLWOR 迭代执行它。这样的事情也应该有效:
xquery version "1.0-ml";
import module namespace admin = "http://marklogic.com/xdmp/admin"
at "/MarkLogic/admin.xqy";
let $config := admin:get-configuration()
let $dbid := xdmp:database("testDB")
let $fields := admin:database-get-fields($config,$dbid)
let $_ :=
for $each in $fields
return xdmp:set($config, admin:database-delete-field($config, $dbid, $each/*:field-name))
return admin:save-configuration($config)
HTH!
我有一个要求,即需要删除现有字段。我找到了删除字段范围索引而不是字段的完美脚本。 所以,我写了这个工作正常的脚本,但我需要一个一个地传递每个字段名:
xquery version "1.0-ml";
import module namespace admin = "http://marklogic.com/xdmp/admin"
at "/MarkLogic/admin.xqy";
let $config := admin:get-configuration()
let $dbid := xdmp:database("testDB")
let $fields := admin:database-get-fields($config,$dbid)
for $each in $fields
let $config := admin:database-delete-field($config, $dbid,$each/*:field-name/fn:string())
return admin:save-configuration($config)
还有其他人对此有更好的解决方案吗?这样我们就可以直接传字段就搞定了
函数admin:database-delete-field()接受多个字段名,所以你可以跳过FLWOR:
xquery version "1.0-ml";
import module namespace admin = "http://marklogic.com/xdmp/admin"
at "/MarkLogic/admin.xqy";
let $config := admin:get-configuration()
let $dbid := xdmp:database("testDB")
let $fields := admin:database-get-fields($config,$dbid)
let $config := admin:database-delete-field($config, $dbid, $fields/*:field-name)
return admin:save-configuration($config)
就是说,如果您发现自己处于无法避免 FLWOR 的位置,请使用 xdmp:set 迭代更新 $config,并以单个保存配置结束。您的代码正在为每个 FLWOR 迭代执行它。这样的事情也应该有效:
xquery version "1.0-ml";
import module namespace admin = "http://marklogic.com/xdmp/admin"
at "/MarkLogic/admin.xqy";
let $config := admin:get-configuration()
let $dbid := xdmp:database("testDB")
let $fields := admin:database-get-fields($config,$dbid)
let $_ :=
for $each in $fields
return xdmp:set($config, admin:database-delete-field($config, $dbid, $each/*:field-name))
return admin:save-configuration($config)
HTH!