如何最大限度地减少XQuery中FOR循环的使用?
我有一个如下的代码,我想知道不使用FOR循环是否可以得到相同的结果-如何最大限度地减少XQuery中FOR循环的使用?,xquery,marklogic,Xquery,Marklogic,我有一个如下的代码,我想知道不使用FOR循环是否可以得到相同的结果- let $doc := cts:search(fn:doc(), cts:element-value-query(......)) let $column-values := ("one,two,three....") (: Can be n number of values :) let $tokenized-values := fn:tokenize($column-values,
let $doc := cts:search(fn:doc(),
cts:element-value-query(......))
let $column-values := ("one,two,three....") (: Can be n number of values :)
let $tokenized-values := fn:tokenize($column-values, ",")
let $result := for $i in $doc
let $temp := for $j in $tokenized-values
return fn:concat("$i//*:",$j)
return <root>{xdmp:value($temp)}</root>
return <result>{$result}</result>
let$doc:=cts:search(fn:doc(),
cts:元素值查询(……)
let$列值:=(“一、二、三…”)(:可以是n个值:)
让$tokenized值:=fn:tokenize($column values,,“”)
设$result:=对于$doc中的$i
设$temp:=以$tokenized值表示的$j
返回fn:concat($i/*:“,$j)
返回{xdmp:value($temp)}
返回{$result}
预期结果如下-
<result>
<root>
<one>abc</one>
<two>456</two>
<three>675</three>
</root>
<root>
<one>dfd</one>
<two>235</two>
<three>765</three>
</root>
</result>
abc
456
675
dfd
235
765
我得到了结果,但是如果我想尽量减少对循环使用,如何才能得到相同的结果
有什么建议吗?为了提高性能,您可以在要提取的所有列上放置一个范围索引,并使用cts:element-value元组代替cts:search。这将只提取您想要的元素,而不是整个文档 对于second For循环的备用语法,可以使用以下语法:
for $j in $tokenized-values
return fn:concat("$i//*:",$j)
到
尽管在性能方面大致相同。为了提高性能,您可以在所有要提取的列上放置范围索引,并使用cts:element值元组代替cts:search。这将只提取您想要的元素,而不是整个文档 对于second For循环的备用语法,可以使用以下语法:
for $j in $tokenized-values
return fn:concat("$i//*:",$j)
到
虽然在性能方面大致相同。您只有两个
用于。。在表达式中,为什么要删除它们?Marklogic是否支持代码>操作员?这肯定是一种不使用的方法,因此$tokenized值!(concat(“$i/*:”,)
会用$j重写你的第二个。但是你最好先解释一下为什么你不想用来处理表达式。我的第一个“for”会遍历所有的文档,无论我从搜索查询中得到什么,这都会降低我的性能。你只有两个for..in
表达式,你为什么要删除它们它们?Marklogic是否支持!
运算符?这肯定是一种不使用的方法,因此$标记化值!(concat(“$i/*:”,)
将用$j重写你的第二个。但是你最好先解释一下为什么你不想用作为表达式。我的第一个“for”将遍历所有文档,无论我从搜索查询中得到什么,这都会降低我的性能。Rob-谢谢:)我将尝试使用cts:element-value元组。事实上,使用XQ31,您可以编写$标记化值!(“$I/*:“| |”)
MarkLogic的1.0-ml
XQuery语法模式既支持!
又支持|
,以及其他一些较新的XQuery运算符和功能。..Rob-谢谢:)我还将尝试使用cts:element-value元组。事实上,使用XQ31,您可以编写$标记化值!(“$i//*:”| |。)
MarkLogic的1.0-ml
XQuery语法模式同时支持
和| |
,以及一些其他较新的XQuery操作符和功能。。