假设我有n个文档,其文档结构如下所示 -
<employee> <name/> <dob/> ..... <dept>dept1</dept> </employee>
<employee> <name/> <dob/> ..... <dept>dept11</dept> </employee>
<employee> <name/> <dob/> ..... <dept>dept12</dept> </employee>
<employee> <name/> <dob/> ..... <dept>dep13</dept> </employee>
<employee> <name/> <dob/> ..... <dept>dep1n</dept> </employee>
<employee> <name/> <dob/> ..... <dept>dept2</dept> </employee>
<employee> <name/> <dob/> ..... <dept>dept21</dept> </employee>
<employee> <name/> <dob/> ..... <dept>dept22</dept> </employee>
<employee> <name/> <dob/> ..... <dept>dept23</dept> </employee>
<employee> <name/> <dob/> ..... <dept>dept2n</dept> </employee>
<employee> <name/> <dob/> ..... <dept>deptn</dept> </employee>
<employee> <name/> <dob/> ..... <dept>deptn1</dept> </employee>
<employee> <name/> <dob/> ..... <dept>deptn2</dept> </employee>
<employee> <name/> <dob/> ..... <dept>deptn3</dept> </employee>
<employee> <name/> <dob/> ..... <dept>deptnn</dept> </employee>
dept1
是父母。即所有名称如dept11,dept12,dept13 ...的dept是dept1的子集。类似dept2
是父级,所有名称如dept21,dept22,dept23的部门都是dept2
的子集。
我想找到属于主要部门的员工名单,即属于dept1,dept11,dept12&amp;依此类推,在Xquery
和Marklogic
API的帮助下
希望大家都明白这个问题。
答案 0 :(得分:3)
可以更好地扩展的解决方案将使用dept
上的范围索引,使用cts:values
进行词典查找,以获得dept
的唯一值及其频率。然后是一个普通的循环,通过值与父部门汇总频率。也许是这样的事情:
let $aggregates := map:map()
let $_ :=
for $dept in cts:values(cts:element-reference(xs:QName("dept")))
let $freq := cts:frequency($dept)
let $parent := substring($dept, 1, 5)
return map:put($aggregates, $parent, (map:get($aggregates, $parent), 0)[1] + $freq)
return $aggregates
为了使它更容易,您可以考虑通过将XML更改为以下内容来使父部门明确:
<dept>dept1</dept><sub-dept>dept11</sub-dept>
这样cts:values
上的dept
会立即给出顶级部门的准确频率计数,cts:values
上的sub-dept
会给出相同的-departments。
HTH!
答案 1 :(得分:0)
现在我找到了解决方案。我相信,可以有更好的方法来实现这一目标。
function senden(form){
var formData = new FormData(form);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://188.166.165.74:13337/api/players', true);
xhr.responseType = 'json';
xhr.onreadystatechange = function() {
alert("Daten wurden erfolgreich uebermittelt")
};
xhr.send(formData);
}
结果就像例如 -
let $result := for $x in /doc/employee/dept[fn:starts-with(., "dept")] order by $x descending
return $x
let $max := fn:codepoints-to-string(fn:string-to-codepoints($result[1])[5])
let $res := for $x in (1 to xs:integer($max))
let $count := fn:count(/doc/employee/dept[fn:starts-with(., fn:concat("dept",xs:string($x)))])
return (<doc><dept>dept{$x}</dept><count>{$count}</count></doc>)
return $res