如何使用 Java 接收 SELECT VALUE COUNT 查询?

How to receive a SELECT VALUE COUNT query with Java?

当我使用Cosmos website执行查询时

SELECT VALUE COUNT(1) FROM c WHERE 1623736778 <= c.timestamp AND 1623736779 <= c.timestamp

我明白了

[
    4
]

在“结果”中window。这,因为执行

SELECT * FROM c WHERE 1623736778 <= c.timestamp AND 1623736779 <= c.timestamp

return我的数据库中有 4 个条目。

如何使用 Java 和 Spring 引导在我的后端代码中接收结果“4”(来自 SELECT VALUE COUNT(1) ...)?换句话说,给定 any Cosmos 存储库,如何使用 [=] 从 SELECT VALUE COUNT ... 查询访问 return 47=]?


对于上下文,我有一个存储库 class,如下所示:

import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.azure.spring.data.cosmos.repository.Query;
import com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository;
import reactor.core.publisher.Flux;
import myownpackage.MyEntity;

@Repository
public interface MyRepository extends ReactiveCosmosRepository<MyEntity, String> {
    ...
    @Query(value = "SELECT * FROM c WHERE @startTime <= c.timestamp AND c.timestamp <= @endTime")
    Flux<MyEntity> findInRange(
        @Param("startTime") Long startTime,
        @Param("endTime") Long endTime
    );

    @Query(value = "SELECT VALUE COUNT(1) FROM c WHERE @startTime <= c.timestamp AND c.timestamp <= @endTime")
    Flux<MyEntity> countInRange(
        @Param("startTime") Long startTime,
        @Param("endTime") Long endTime
    );
}

为我服务class我努力做到

@Autowired private MyRepository repo;
int totalCount = repo.countInRange(1623736778, 1623736779).collectList().block().get(0);

因此 totalCount == 4,但这会导致出现“不兼容的类型:myownpackage.MyEntity 无法转换为 int”的错误。将 countInRange 的 return 类型更改为 int 会给出“int cannot be dereferenced”。以这种方式从 findInRange() 访问结果没有问题。我使用记录器(来自 slf4j)到 运行

LOGGER.info("\n\nHere is the type we need to know: {}\n\n",
repo.countInRange(1623736778,1623736779).getClass().getCanonicalName());

记录“这是我们需要知道的类型:reactor.core.publisher.FluxMap”,但谷歌搜索 reactor.core.publisher.FluxMap 没有显示任何类似于 Flux's documentation.

的文档

结果是原始类型 int 而不是 Object。取消引用是访问引用引用的值的过程。因为 int 已经是一个值(不是引用),所以不能取消引用。尝试将 return 类型更改为 Flux<Integer>