如何编写 Azure Cosmos COUNT DISTINCT 查询



>目标

返回 Cosmos 集合分区中特定文档字段的非重复值计数。

步骤

如果我在 Azure Cosmos 数据库上运行以下查询,

SELECT DISTINCT c.field
FROM c
WHERE c.field = 'abc' AND c.partitionKeyField = '123'

我按预期得到一行,例如以下响应

[
{
"field": "abc"
}
]

但是,如果我随后运行以下查询以尝试通过以下查询计算响应中不同文档的数量

SELECT VALUE COUNT(1)
FROM (
SELECT DISTINCT c.field
FROM c
WHERE c.field = 'abc' AND c.partitionKeyField = '123'
)

它返回

[
6
]

这是c.field设置为"abc"的文档总数,而不是c.field的非重复值数。

问题

请您帮助我理解为什么查询返回文档的数量而不是c.field的非重复值的数量,以及是否有一个查询将返回c.field的不同值的数量,即 1?

编辑 - 附言。我知道这是一个人为的例子,因为根据定义,c.field的唯一值的数量总是 1 - 我故意从实际案例中简化了这一点。

在撰写本文时(22/01/2021(,此查询提供了正确数量的非重复值:

SELECT COUNT(UniqueFields) AS UniqueCount
FROM (SELECT DISTINCT c.field
FROM c
WHERE c.field = 'abc' AND c.partitionKeyField = '123') as UniqueFields