json - 如何仅使用不同的值对 JSON 文档进行分组?

标签 json xquery marklogic marklogic-8

我有一些属于同一集合(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/

相关文章:

javascript - 如何在node js中递归读取树状目录结构中的文件

android - Flutter - 无法发出 POST 请求

javascript - 使用 MVC Form Post 发送 HTML 字符串

rest - 在用 XQuery 编写的 REST 扩展 GET 中输出内容类型和其他 header

node.js - Marklogic 8 nodejs queryBuilder.orderBy SEARCH-BADORDERBY

javascript - 如何从 JSON 对象中检索带有坐标的变量

function - XQuery 中的 tail() 函数

datetime - Xpath 中的循环时间

XQuery:映射到序列数组

javascript - 什么是服务器端 javascript 等同于 xquery 的 xpath