筛选查询等于,包含,开始于和结束于时的意外结果

时间:2019-07-10 14:30:13

标签: azure-cosmosdb azure-cosmosdb-sqlapi

public interface UserRepository extends JpaRepository<User, Integer> { public List<User> findByRoles( String role); } 返回2191

SELECT value count(1) from c where c.FormName = "Newsletter"返回697

SELECT value count(1) from c where contains (c.FormName, "Newsletter")返回2191

SELECT value count(1) from c where startswith(c.FormName, "Newsletter")返回701

我希望所有这些请求都返回相同的值2191,但是SELECT value count(1) from c where endswith(c.FormName, "Newsletter")contains返回一个意外值。

这正常吗?

1 个答案:

答案 0 :(得分:0)

是正常的。所有这些查询将消耗一些RU。每个查询将消耗的RU是不同的,因为它们的“负载”是不同的。

在执行SELECT value count(1)时,您将迫使Cosmos在单个查询中返回其所有结果。但是,Cosmos DB仅按设计返回分页结果。这种分页还有助于将负载分散到许多查询中,并将其汇总到客户端站点上。 SELECT value count(1)不允许这种聚合,因此您得到的响应是请求用完RU之前的数量。

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