使用聚合运行查询时,我收到以下异常:
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版本工作的任何想法?
答案 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