如何在Couchbase中统计数组内指定键值的出现次数?
解决方案:统计Couchbase数组中指定键的不同值出现次数
针对单个活动的统计查询
如果只需要统计指定活动(如Brand Management)的出现次数并返回包含活动名称的结果,可使用以下N1QL查询:
SELECT RAW { attr.activity : COUNT(1) } FROM workflow wf UNNEST wf.attributes attr WHERE wf.appId = "f1606a90-c96f-4db9-8e5f-9f0b6d2d2116" AND attr.activity = 'Brand Management' GROUP BY attr.activity;
返回结果
[ { "Brand Management": 2 } ]
如果你需要保留外层的键名(如activity_count),可去掉RAW关键字:
SELECT { attr.activity : COUNT(1) } AS activity_count FROM workflow wf UNNEST wf.attributes attr WHERE wf.appId = "f1606a90-c96f-4db9-8e5f-9f0b6d2d2116" AND attr.activity = 'Brand Management' GROUP BY attr.activity;
返回结果
[ { "activity_count": { "Brand Management": 2 } } ]
通用场景:统计所有活动的出现次数
如果需要一次性统计所有activity键对应的不同值的出现次数,可使用OBJECT_AGG函数将结果合并为一个对象:
SELECT OBJECT_AGG(attr.activity, COUNT(1)) AS activity_counts FROM workflow wf UNNEST wf.attributes attr WHERE wf.appId = "f1606a90-c96f-4db9-8e5f-9f0b6d2d2116" AND attr.activity IS NOT NULL GROUP BY wf.appId;
返回结果
[ { "activity_counts": { "Brand Management": 2, "Upsert": 1 } } ]
核心逻辑说明
UNNEST:展开attributes数组,将数组中的每个元素转换为独立的查询行;GROUP BY attr.activity:按活动名称分组,确保统计的是每个活动的独立出现次数;COUNT(1):统计每组的行数,即对应活动的出现次数;- 对象构造/聚合:通过
{ attr.activity : COUNT(1) }或OBJECT_AGG生成你需要的键值对结构。
内容的提问来源于stack exchange,提问作者Sweta Sharma
相关产品推荐
相关产品推荐

