【发布时间】:2017-04-06 10:31:53
【问题描述】:
我需要使用 corb 来生成报告。
Data:
Collection A : Col1,Col2,Col3,Col4
Collecntion B: Col1,Col5,Col6,Col7
Collection C: Col1,Col8,Col9
Output Requirement: Col1,Col2,Col5,Col6,Col8
Col1 在某种程度上是集合 B、C 中的内部连接
我的uri.xqy看起来像这样:
(:Get the list from Col1 to join on all:)
let $listFromCol1 := cts:element-values(xs:QName("Col1"),(),(),cts:and-query(....))
let $A := cts:uris((),(),cts:and-query((cts:collection-query("A"),cts:element-range-query(xs:QName("Col1"),"=",$ListFromCol1)))
let $B := cts:uris((),(),cts:and-query((cts:collection-query("B"),cts:element-range-query(xs:QName("Col1"),"=",$ListFromCol1)))
let $C := cts:uris((),(),cts:and-query((cts:collection-query("C"),cts:element-range-query(xs:QName("Col1"),"=",$ListFromCol1)))
现在,我得到了各个集合的 URI。我需要将此传递给我的process.xqy return (count($uris), $uris)。
我想知道如何获取所有 $A、$B、$C 的计数并连接所有 $A、$B、$C 的 URI。
请帮忙
【问题讨论】:
-
您想要遍历 Col1 值,而不是 uri。 Corb 是否允许您像返回 uris 一样返回 Col1 值?然后,如果您在 col1 上执行 cts:search,您将一次性获得与该记录相关的所有文档,并可以构建您的报告所需的记录。否则它会变得有点复杂..
-
你试过了吗? ;-)
-
您只是想要一个不同的 URI 列表,这些 URI 在 $A、$B、$C 中?为什么不将它们与
cts:collection-query()中指定的每个集合组合成一个查询?像这样:cts:uris((),(),cts:and-query((cts:collection-query( ("A", "B", "C") ),cts:element-range-query(xs:QName("Col1"),"=",$ListFromCol1))) -
另外,如果您有成千上万个 URI,您可能还需要启用
DISK-QUEUE选项,以避免耗尽您的 JVM 内存。 -
听起来你有一个解决方案 -- @MadsHansen,你能把它写下来作为答案,以便人们很容易看到这个问题已经解决了吗?