我对Couchbase完全不熟悉,虽然学习得很快,但我很难看到是否有可能创建一个查询/视图来聚合存储在嵌套字段中的数据,其中嵌套字段的结构是不确定的
例如,考虑以下文件:
[
{
"customer": 1,
"user": 21,
"group": 2,
"data": {
"cat": 2,
"dog": 1
}
},
{
"customer": 1,
"user": 22,
"group": 3,
"data": {
"cat": 1,
"rabbit": 3
}
},
{
"customer": 1,
"user": 23,
"group": 2,
"data": {
"budgie": 1,
"mouse": 1,
"dog": 1
}
}
]
我希望有一个查询,例如,按“group”和“customer”进行分组,并生成类似于以下内容的结果:
[
{
"customer": 1,
"group": 2,
"data": {
"cat": 2,
"dog": 2,
"budgie": 1,
"mouse": 1
}
},
{
"customer": 1,
"group": 3,
"data": {
"cat": 1,
"rabbit": 3
}
}
]
顶级数据(客户/用户/组/数据)将是静态的,并且始终包含这些字段,但“数据”中的项目是自由格式的。
这是Couchbase本身可能出现的问题,还是我需要以编程方式使用客户端应用程序?
我暂时已经解决了程序化解决方案,但很高兴知道。
答案 0 :(得分:0)
这适用于Couchbase 4.5.1。对于即将发布的4.6,将p .value`更改为p.val。
SELECT customer, `group`, OBJECT d.name : d.sum FOR d IN ARRAY_AGG( { "name":name, "sum":sum } ) END AS data
FROM
(
SELECT d.customer, d.`group`, p.name, SUM( p.`value` ) AS sum
FROM default AS d UNNEST OBJECT_PAIRS( data ) AS p
GROUP BY d.customer, d.`group`, p.name
) AS s
GROUP BY customer, `group`;