使用 equal、contains、startswith 和 endswith 过滤查询时出现意外结果

Unexpected results while filtering query with equal, contains, startswith and endswith

SELECT value count(1) from c where c.FormName = "Newsletter" returns 2191

SELECT value count(1) from c where contains (c.FormName, "Newsletter") returns 697

SELECT value count(1) from c where startswith(c.FormName, "Newsletter") returns 2191

SELECT value count(1) from c where endswith(c.FormName, "Newsletter") returns 701

我原以为所有这些请求 return 的值都是相同的 2191,但 containsendswithreturn 是一个意外的值。

这正常吗?

是正常的。所有这些查询都会消耗一些 RU。每个查询将使用的 RU 不同,因为它们 "load" 不同。

当您执行 SELECT value count(1) 时,您会强制 Cosmos return 所有结果都在一个查询中。但是,Cosmos DB 按照设计只有 returns 分页结果。这种分页还有助于将负载分散到许多查询中并将它们聚合到客户端站点上。 SELECT value count(1) 不允许进行此类聚合,因此您得到的响应是您请求前 运行 的 RU 数。

如果您 SELECT c.id from c where blablabla 并且使用 while(query.HasMoreResults)query.ExecuteNextAsync() 方法并在客户端汇总计数,您应该得到相同的数字。