在 Marklogic 中提供 XDMP-CONFLICTINGUPDATES 的增量计数器
Incremental Counter giving XDMP-CONFLICTINGUPDATES in Marklogic
我想根据条件自动增加要插入的文档的 URI,但对于单个文档它是有效的,对于多个文档我得到 XDMP CONFLICTINGUPDATES
代码:
if ($results) then
local:replace($results, $i )
else if($i) then
(
let $counter := 10000000
let $uri := concat("/test-", ($counter+1),".xml")
return (xdmp:document-insert($uri, $i , (), "collection"), "Document inserted")
)
else "No document"
很难根据这个有限的样本判断您的代码在做什么。
但是,这可能是您的问题:
let $counter := 10000000
let $uri := concat("/test-", ($counter+1),".xml")
return (xdmp:document-insert($uri, $i , (), "collection"), "Document inserted")
如果您在单个事务中多次向同一个 URI 插入文档,那么我希望您看到的是错误。
对此有多种解决方案,但是在不知道您要做什么的情况下很难知道哪个是最好的。最等效的解决方案是做这样的事情:
let $counter := map:map()
let $_ := map:put($counter, "counter", 1)
...
if ($results) then
local:replace($results, $i )
else if($i) then
(
let $counterValue := map:get($counter, "counter")
let $_ := map:put($counter, "counter", $counterValue+1)
let $uri := concat("/test-", ($counterValue),".xml")
return (xdmp:document-insert($uri, $i , (), "collection"), "Document inserted")
)
else "No document"
这样,您将保留计数器的最后一个值并在每次插入文档时正确地递增它。请注意,根据代码的编写方式,您可能不需要地图来保存值,但我强烈怀疑您需要。
回应您的评论。要获得此技术的非常简单的演示,请比较以下结果:
let $counter := 1
for $i in (1 to 10)
let $counter := $counter + 1
return $counter
收件人:
let $counter := map:map()
let $_ := map:put($counter, "counter", 1)
for $i in (1 to 10)
let $counterValue := map:get($counter, "counter")
let $_ := map:put($counter, "counter", $counterValue+1)
return $counterValue
我想根据条件自动增加要插入的文档的 URI,但对于单个文档它是有效的,对于多个文档我得到 XDMP CONFLICTINGUPDATES
代码:
if ($results) then
local:replace($results, $i )
else if($i) then
(
let $counter := 10000000
let $uri := concat("/test-", ($counter+1),".xml")
return (xdmp:document-insert($uri, $i , (), "collection"), "Document inserted")
)
else "No document"
很难根据这个有限的样本判断您的代码在做什么。
但是,这可能是您的问题:
let $counter := 10000000
let $uri := concat("/test-", ($counter+1),".xml")
return (xdmp:document-insert($uri, $i , (), "collection"), "Document inserted")
如果您在单个事务中多次向同一个 URI 插入文档,那么我希望您看到的是错误。
对此有多种解决方案,但是在不知道您要做什么的情况下很难知道哪个是最好的。最等效的解决方案是做这样的事情:
let $counter := map:map()
let $_ := map:put($counter, "counter", 1)
...
if ($results) then
local:replace($results, $i )
else if($i) then
(
let $counterValue := map:get($counter, "counter")
let $_ := map:put($counter, "counter", $counterValue+1)
let $uri := concat("/test-", ($counterValue),".xml")
return (xdmp:document-insert($uri, $i , (), "collection"), "Document inserted")
)
else "No document"
这样,您将保留计数器的最后一个值并在每次插入文档时正确地递增它。请注意,根据代码的编写方式,您可能不需要地图来保存值,但我强烈怀疑您需要。
回应您的评论。要获得此技术的非常简单的演示,请比较以下结果:
let $counter := 1
for $i in (1 to 10)
let $counter := $counter + 1
return $counter
收件人:
let $counter := map:map()
let $_ := map:put($counter, "counter", 1)
for $i in (1 to 10)
let $counterValue := map:get($counter, "counter")
let $_ := map:put($counter, "counter", $counterValue+1)
return $counterValue