首页 > 解决方案 > cosmos db 无法使用 IN 查询,spring 数据原生查询和数组或集合(Java)

问题描述

我正在尝试为反应性存储库 spring 数据 cosmo DB 创建(使用 spring 本机查询)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 数据本机查询,而无需采取变通方法。

标签: azurespring-dataazure-cosmosdbspring-webfluxazure-cosmosdb-sqlapi

解决方案


你应该使用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);

推荐阅读