【问题标题】:Count of distinct doesnot work with cosmosdb [duplicate]不同的计数不适用于 cosmos db [重复]
【发布时间】:2018-10-22 07:05:07
【问题描述】:

下面的不同查询现在可以工作了:

SELECT DISTINCT c.name  FROM c

但是下面的查询不起作用,这里有什么地方做错了吗?

SELECT COUNT(DISTINCT c.name) FROM c

Failed to query documents for collection products: {"code":400,"body":"{\"code\":\"BadRequest\",\"message\":\"Message: {\\\"errors\\\":[{\\\"severity\\\":\\\"Error\\\",\\\"location\\\":{\\\"start\\\":13,\\\"end\\\":21},\\\"code\\\":\\\"SC1001\\\",\\\"message\\\":\\\"Syntax error, incorrect syntax near 'DISTINCT'.\\\"}]}\\r\\nActivityId: 05bf1757-ce1b-4ee4-9ae5-f2b778c55ded, Microsoft.Azure.Documents.Common/2.0.0.0\"}","activityId":"05bf1757-ce1b-4ee4-9ae5-f2b778c55ded"}

【问题讨论】:

  • 看起来您必须从第一个(工作)查询中获取结果集,然后对其进行计数选择。
  • 如果您认为我的回答对您有帮助,请标记为回答。谢谢。
  • 希望这会奏效。 SELECT VALUE COUNT(1) from (SELECT DISTINCT c.name from c)

标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

SELECT COUNT(DISTINCT c.name) FROM c 是 Cosmos DB 不支持的语法错误。

您可以使用Stored Procedure 为您的查询结果执行计数任务:

function sample() {
    var collection = getContext().getCollection();
    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT distinct r.name FROM root r',
    function (err, feed, options) {
        if (err) throw err;

        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
            //or return 0 
        }
        else {
            var response = getContext().getResponse();
            response.setBody(feed.length);
        }
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

【讨论】:

  • 最好只是投票关闭这个问题作为重复,然后将您的答案添加到另一个问题。
猜你喜欢
  • 1970-01-01
  • 2021-01-11
  • 2021-11-02
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 2017-12-10
相关资源
最近更新 更多