我有一个完整的逻辑,首先我需要从暂存数据库和最终数据库中修改或删除文档,最后我需要将过滤后的数据插入到 DataHub 框架中的最终数据库中。
我在collector.xqy中标记了我的代码,但它说Cannot apply an update function from a query
代码如下 -
let $a :=
for $i in cts:search(doc(),cts:collection-query(("ABC")))
return
let $uri := fn:base-uri($i)
let $a := $i/*:envelope/*:a/text()
let $b := $i/*:envelope/*:b/text()
let $c := if(($a eq "123") or ($b eq "345")) then base-uri($i) else ()
let $condition :=
for $j in $c
let $id1 := $j/*:envelope/*:id1/text()
let $id2 := $j/*:envelope/*:id2/text()
let $node1 := $j/*:envelope/*:NODE1
let $node2 := $j/*:envelope/*:NODE2
let $result :=
xdmp:invoke-function(
function() {
cts:search(doc(),
cts:and-query((
cts:or-query((
cts:element-value-query(xs:QName("id1"),$id1),
cts:element-value-query(xs:QName("id2"),$id2)
)),
cts:collection-query(("ABC"))
))
)
},
<options xmlns="xdmp:eval">
<database>{xdmp:database("FINAL")}</database>
</options>)
return
if(fn:exists($result) eq fn:true()) then
()
else (
xdmp:node-replace($node1,<NODE1>Replacing Node 1</NODE1>),
xdmp:node-replace($node2,<NODE2>Replacing Node 2</NODE2>)
)
return $uri
return ()
此代码不适用于collector.xqy,因为它有更新语句。我不能在 writer.xqy 中写这个,因为初始条件即;let $c := if(($a eq "123") or ($b eq "345")) then base-uri($i) else ()
我需要从 STAGING 数据库中检查。
有什么建议么 ?