cosmos db 无法使用 IN、spring 数据本机查询和数组或集合 (Java) 进行查询
cosmos db cannot query using IN, spring data native query and array or collection(Java)
我正在尝试创建(使用 spring 本机查询)反应存储库 spring 数据 cosmo DB 的 findAllId。
由于未实现 ReactiveCosmosRepository。
@Query(value = " SELECT *\n" +
" FROM container_name km\n" +
" WHERE km.id IN (@ids) \n" +
" ORDER BY km.createdDate DESC ")
Flux<ContainerData> findAllById(@Param("ids") String[] ids);
甚至
@Query(value = " SELECT *\n" +
" FROM container_name km\n" +
" WHERE km.id IN (@ids) \n" +
" ORDER BY km.createdDate DESC ")
Flux<ContainerData> findAllById(@Param("ids") Iterable<String> ids);
但它没有检索到任何结果,也没有抛出任何异常。
所以问题是,如何在 cosmos db 和集合或数组中将 IN 运算符与 spring 数据原生查询一起使用,而无需采取变通方法。
你应该使用array_contains
@Query(value = " SELECT *\n" +
" FROM container_name km\n" +
" WHERE array_contains(@ids, km.id, true) \n" +
" ORDER BY km.createdDate DESC ")
Flux<ContainerData> findAllById(@Param("ids") Iterable<String> ids);
我正在尝试创建(使用 spring 本机查询)反应存储库 spring 数据 cosmo DB 的 findAllId。 由于未实现 ReactiveCosmosRepository。
@Query(value = " SELECT *\n" +
" FROM container_name km\n" +
" WHERE km.id IN (@ids) \n" +
" ORDER BY km.createdDate DESC ")
Flux<ContainerData> findAllById(@Param("ids") String[] ids);
甚至
@Query(value = " SELECT *\n" +
" FROM container_name km\n" +
" WHERE km.id IN (@ids) \n" +
" ORDER BY km.createdDate DESC ")
Flux<ContainerData> findAllById(@Param("ids") Iterable<String> ids);
但它没有检索到任何结果,也没有抛出任何异常。
所以问题是,如何在 cosmos db 和集合或数组中将 IN 运算符与 spring 数据原生查询一起使用,而无需采取变通方法。
你应该使用array_contains
@Query(value = " SELECT *\n" +
" FROM container_name km\n" +
" WHERE array_contains(@ids, km.id, true) \n" +
" ORDER BY km.createdDate DESC ")
Flux<ContainerData> findAllById(@Param("ids") Iterable<String> ids);