在x64平台上执行聚合查询时发生异常

时间:2017-03-20 15:40:05

标签: c# azure-cosmosdb

使用聚合运行查询时,我收到以下异常:

var store = "1234";
var sumResults = client.CreateDocumentQuery(
UriFactory.CreateDocumentCollectionUri("my-data-db", "my-collection"),
$"SELECT SUM(t.totalAmount) FROM t where t.siteData.siteID = '{store}'");

我的查询代码是:

{{1}}

我花了一些时间才弄清楚当构建平台设置为x86时这种工作正常但设置为x64时失败。

我正在使用最新版本的软件包1.12.2

有关如何使x64版本工作的任何想法?

2 个答案:

答案 0 :(得分:4)

根据您的描述,我使用Microsoft.Azure.DocumentDB 1.12.2在DocomentDB Emulator和Azure DocumentDB上测试类似的查询。经过一些试验,我发现这个问题只发生在你对DocomentDB Emulator使用SQL聚合函数(例如COUNT,MIN,MAX,SUM和AVG)时(我的当前版本是1.11.136.2)并且你的项目是在x64上构建的

正如这位官方document提到的与Azure DocumentDB的聚合:

  

已向所有DocumentDB生产数据中心推出了聚合支持。您可以开始针对现有DocumentDB帐户运行聚合查询,也可以通过SDK,REST API或Azure门户提供新的DocumentDB帐户。但是,您必须下载最新版本的SDKs才能在.NET中执行跨分区聚合查询使用LINQ聚合运算符

我假设你可以利用LINQ来聚合聚合,如下所示:

var amount=client.CreateDocumentQuery<DocEntity>("/dbs/{your-db-id}/colls/{your-collection-id}",
     new FeedOptions { MaxDegreeOfParallelism = -1 })
      .Where(r => r.siteID == "1234")
      .Sum(r=>r.totalAmount);

我们可以发现上面的查询会生成以下查询:

{"query":"SELECT VALUE Sum(root[\"totalAmount\"]) FROM root WHERE (root[\"siteID\"] =\"1234\") "}

有关详细信息,请参阅此tutorial

答案 1 :(得分:3)

您需要在您的查询中添加Value,例如

SELECT VALUE COUNT(1) 来自C