从 marklogic 中删除用户

remove users from marklogic

我有一组用户名,要从marklogic数据库中删除。列表中的某些用户可能存在也可能不存在于数据库中。我尝试使用下面的脚本但是当没有找到用户时它失败了。如何在找不到用户时使脚本 运行 不停止,即继续删除下一个用户而不是出错并停止脚本执行。请帮忙

xquery version "1.0-ml";
import module namespace sec = "http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
declare variable $USERS := ("user1","user2","user3");
for $user in $USERS
     return $user||'-'||fn:empty((sec:remove-user($user)));

错误如下

[1.0-ml] SEC-USERDNE: (err:FOER0000) User does not exist: sec:user-name = user1
Stack Trace
In /MarkLogic/security.xqy on line 3612
In get-element("http://marklogic.com/xdmp/security", "sec:user", "sec:user-name", "user1", "SEC-USERDNE")
$col := "http://marklogic.com/xdmp/security"
$elem := "sec:user"
$filter := "sec:user-name"
$value := "user1"
$function-error := "SEC-USERDNE"
$filterValue := <sec:user-name xmlns:sec="http://marklogic.com/xdmp/security">user1</sec:user-name>
$outElem := ()

您可以添加一个 where 子句来检查用户是否存在。所以,像这样

xquery version "1.0-ml";
import module namespace sec = "http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";

declare variable $USERS := ("user1","user2","user3");

for $user in $USERS
where sec:user-exists($user)
return $user||'-'||fn:empty((sec:remove-user($user)));

如果您希望它根据用户是否实际被删除来打印 true 或 false,您可以将该检查放入 if 作为 return 的一部分。