我有一些属于同一集合(alpha)的 JSON 文件:
Aplha_a.json
{
"date": "24-july-2017",
"ID": "001",
"data": "a",
"reg_date": "24-july-2017"
}
Aplha_b.json
{
"date": "24-july-2017",
"ID": "001",
"data": "b",
"reg_date": "24-july-2017"
}
Aplha_c.json
{
"date": "24-july-2017",
"ID": "001",
"data": "c",
"reg_date": "24-july-2017"
}
上面的 json 文件是使用 ID 从集合“alpha”中获取的,这是通过下面提到的查询完成的:
cts:search(collection("alpha"),
cts:and-query((
cts:json-property-range-query("ID", "=", "001"),
cts:json-property-value-query("reg_date", "24-july-2017")
))
)
现在,这些不同的 json 文件需要分组为一个仅返回不同节点的 alpha_family 文档。输出应如下所示:
{Alpha_family: {
"date": "24-july-2017"
"ID": "001"
"data": "a"
"data": "b"
"data": "c"
"reg_date": "24-july-2017"
}
任何人都可以帮助实现这一目标吗?
提前致谢。
最佳答案
如何迭代文档,并随时随地聚合 json 对象中的不同值。像这样的东西:
xdmp:document-insert("/Aplha_a.json", xdmp:unquote('
{
"date": "24-july-2017",
"ID": "001",
"data": "a",
"reg_date": "24-july-2017"
}
'), xdmp:default-permissions(), "alpha"),
xdmp:document-insert("/Aplha_b.json", xdmp:unquote('
{
"date": "24-july-2017",
"ID": "001",
"data": "b",
"reg_date": "24-july-2017"
}
'), xdmp:default-permissions(), "alpha"),
xdmp:document-insert("/Aplha_c.json", xdmp:unquote('
{
"date": "24-july-2017",
"ID": "001",
"data": "c",
"reg_date": "24-july-2017"
}
'), xdmp:default-permissions(), "alpha")
;
let $json := json:object()
let $_ :=
for $doc in cts:search(collection("alpha"),
cts:and-query((
cts:json-property-value-query("ID", "001"),
cts:json-property-value-query("reg_date", "24-july-2017")
))
)
for $prop in $doc//text()
let $exists := map:get($json, name($prop))
return
map:put($json, name($prop), distinct-values(($exists, $prop)))
return $json
我不太确定用例,这种方法在较大的数据集上扩展性会很差。但如果搜索总是只返回少量文档,那么这对您来说可能就足够了。
呵呵!
关于json - 如何仅使用不同的值对 JSON 文档进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46297487/