如何通过提供在运行时计算其值的变量来评估查询?

时间:2017-11-23 15:50:58

标签: xquery marklogic

我有一段代码,我希望返回特定林中的文档总数。我想确定林文档计数是0还是更多。

 declare function local:forest-doc-count($db-name,
                                        $f-id as xs:unsignedLong) as xs:integer {
  let $_ := xdmp:log(xdmp:describe(fn:concat("$db-name -->", $db-name), (),()))                    
    let $query := 'xquery version "1.0-ml";
                    declare variable $f-id as xs:unsignedLong external;
                   xdmp:estimate(cts:search(fn:doc(), (), (), (), $f-id))'
    let $count := xdmp:eval($query , (),
                    map:entry("f-id",   $f-id),
                    map:entry("database", xdmp:database($db-name))
                    )
    return $count
};

其中 $ f-id 是林ID, $ db-name 是数据库名称。现在我正在

  

未定义的变量$ f-id

1 个答案:

答案 0 :(得分:5)

在查询中声明一个外部变量,然后将值绑定到调用中的外部变量。

以下草图未经测试,但沿着这些线条应该有效:

declare function local:forest-doc-count(
    $db-name as xs:string,
    $f-id    as xs:unsignedLong
) as xs:integer {
    xdmp:eval(
        'xquery version "1.0-ml";
         declare variable $f-id as xs:unsignedLong external;
         xdmp:estimate(cts:search(fn:doc(), (), (), (), $f-id))',
        map:entry("f-id",     $f-id),
        map:entry("database", xdmp:database($db-name))
        )
};

脚注:你可能想要声明参数的类型,并在它们被确定时返回值以利用类型检查。

希望这很有用,