Как удалить все поля, созданные в MarkLogic

#field #marklogic

#поле #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) 
 

Есть ли у кого-нибудь еще лучшее решение для этого? Таким образом, мы можем напрямую передавать поля, и это сделано.

Ответ №1:

Функция 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:установите для итеративного обновления $config и завершите с помощью одного save-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!

Комментарии:

1. Спасибо за ваш вклад, это действительно помогло.