2017-11-23 9 views
1

特定のフォレスト内のドキュメントの総数を返すコードがあります。フォレストの文書数が0以上かどうかを調べたいの$ F-ID森林番号との$ DB-名です実行時に値が評価される変数を指定してクエリを評価するにはどうすればよいですか?

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

答えて

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)) 
     ) 
}; 

脚注:あなたは、パラメータの型を宣言し、それらが型チェックを活用するために確定されたときの値を返すようにしたいかもしれません。

ホッピング便利だ、

+0

arg4はxs:string型ではありません。これは私が受け取っているものです。 – basari66

+1

コードに2つのタイプミスが修正されました。文字通りコピーしましたか?このように 'local:forest-doc-count(xdmp:データベース名(xdmp:データベース))、xdmp:データベースフォレスト(xdmp:データベース())[1])で呼び出すと、 ' – grtjn

+0

いいえ、私はそのまま貼り付けてコピーしませんでした。私のために働いていない。私もログを入れ、エラーログをチェックしました。 $ db-nameの文字列があります。私はまだ 'arg4はxs:string'型ではないという同じエラーを受けています。コードを更新しましたので、エラーをさらに確認することができます。 – basari66

関連する問題