嵌套字段的Couchbase聚合

时间:2016-11-08 14:25:12

标签: grouping couchbase aggregation n1ql

我对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本身可能出现的问题,还是我需要以编程方式使用客户端应用程序?

我暂时已经解决了程序化解决方案,但很高兴知道。

1 个答案:

答案 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`;
相关问题