分组数组的重复键值并在N1QL中显示计数

问题描述

{
"brands": [
  {
    "value": "brand1"
  },{
    "value": "brand1"
  },{
    "value": "brand2"
  }
],"count": 3,"name": "Windows"
}

我有一个像这样的文档,如何将具有相似值的数组内容分组并获取其计数?像下面这样。有人可以帮我吗?

{
"brands": [
{
  "value": "brand1","count": 2
},{
  "value": "brand2","count":1
}
],"name": "Windows"
}

解决方法

使用子查询表达式根据您的需要重建阵列。后记对数组值执行ARRAY_SUM()以获得超出总数的计数。

SELECT d.*,brands,ARRAY_SUM(brands[*].`count`) AS count
FROM default AS d
LET brands =  (SELECT b.`value`,COUNT(1) AS count
               FROM d.brands AS b
               GROUP BY b.`value`)
WHERE ....

如果外部计数已经正确

SELECT d.*,(SELECT b.`value`,COUNT(1) AS count
               FROM d.brands AS b
               GROUP BY b.`value`) AS brands
FROM default AS d
WHERE ....