如何使用 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>
当我使用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>