Spring 数据 CosmosTemplate 使用系统函数创建查询
Spring Data CosmosTemplate create query with System Functions
我们正在尝试使用来自 spring-data-cosmosdb 项目的 cosmosTemplate 实现查询。
查询具有以下语法:
"select * from movie where ARRAY_CONTAINS(movie.countries, @country)"
。
CosmosTemplate 接受基于 Criteria 对象构建的 DocumentQuery 对象。 Criteria 对象支持一小部分基本谓词,如 in
、or
、is equal
等,但没有 array_contains
谓词。
目前查询是使用 cosmos 客户端(来自 sdk)而不是 cosmosTemplate 执行的。
这给我们带来了两个问题:
- 我们必须混合使用 cosmosTemplate 和 cosmos 客户端的代码。
- 由于我们有使用系统函数的复杂参数化查询,我们必须连接 sql 个查询字符串并收集 sql 个参数。
应该如何使用 cosmosTemplate 处理此类查询,甚至可能吗?
P.S 我们正在使用 com.microsoft.azure:azure-cosmosdb-spring-boot-starter:2.2.5 库。
在当前的 GA 版本中,您必须像您提到的那样一起使用客户端和模板。
最新的测试版包括对 QueryAnnotation 在存储库中使用注释查询的支持。下面是一个例子:
@Query(value = "select * from c where c.firstName = @firstName and c.lastName = @lastName")
List<User> getUsersByTitleAndValue(@Param("firstName") int firstName, @Param("lastName") String lastName);
Ravi 的回答是正确的。要直接从 Spring 数据连接器创建自定义查询,当前有两个选项。
首先,您可以按照本文档“自定义查询”部分中的说明进行操作
指导您直接使用 Java SDK CosmosClient。 Spring 数据连接器的当前 GA 版本没有启用自定义查询注释的 @Query 注释,这就是您需要直接使用 Java SDK 的原因。
其次,升级到启用@Query注解的最新测试版
https://mvnrepository.com/artifact/com.azure/azure-spring-data-cosmos
此示例代码将在接下来的几天内发布,GA 版本计划于 9 月 30 日发布,因此不会等待很长时间。
经过azure sdk的研究,我发现目前并非所有系统功能都受cosmosTemplate支持。
可在此处找到支持的系统功能列表:
如果您不想编写使用系统函数的查询,即不在上面 link 的列表中,您可以使用 @Query
注释或直接使用 cosmos 客户端宇宙模板。
我们正在尝试使用来自 spring-data-cosmosdb 项目的 cosmosTemplate 实现查询。
查询具有以下语法:
"select * from movie where ARRAY_CONTAINS(movie.countries, @country)"
。
CosmosTemplate 接受基于 Criteria 对象构建的 DocumentQuery 对象。 Criteria 对象支持一小部分基本谓词,如 in
、or
、is equal
等,但没有 array_contains
谓词。
目前查询是使用 cosmos 客户端(来自 sdk)而不是 cosmosTemplate 执行的。
这给我们带来了两个问题:
- 我们必须混合使用 cosmosTemplate 和 cosmos 客户端的代码。
- 由于我们有使用系统函数的复杂参数化查询,我们必须连接 sql 个查询字符串并收集 sql 个参数。
应该如何使用 cosmosTemplate 处理此类查询,甚至可能吗?
P.S 我们正在使用 com.microsoft.azure:azure-cosmosdb-spring-boot-starter:2.2.5 库。
在当前的 GA 版本中,您必须像您提到的那样一起使用客户端和模板。
最新的测试版包括对 QueryAnnotation 在存储库中使用注释查询的支持。下面是一个例子:
@Query(value = "select * from c where c.firstName = @firstName and c.lastName = @lastName")
List<User> getUsersByTitleAndValue(@Param("firstName") int firstName, @Param("lastName") String lastName);
Ravi 的回答是正确的。要直接从 Spring 数据连接器创建自定义查询,当前有两个选项。
首先,您可以按照本文档“自定义查询”部分中的说明进行操作
指导您直接使用 Java SDK CosmosClient。 Spring 数据连接器的当前 GA 版本没有启用自定义查询注释的 @Query 注释,这就是您需要直接使用 Java SDK 的原因。
其次,升级到启用@Query注解的最新测试版
https://mvnrepository.com/artifact/com.azure/azure-spring-data-cosmos
此示例代码将在接下来的几天内发布,GA 版本计划于 9 月 30 日发布,因此不会等待很长时间。
经过azure sdk的研究,我发现目前并非所有系统功能都受cosmosTemplate支持。
可在此处找到支持的系统功能列表:
如果您不想编写使用系统函数的查询,即不在上面 link 的列表中,您可以使用 @Query
注释或直接使用 cosmos 客户端宇宙模板。