Spring Data CosmosTemplate使用系统函数创建查询



我们正在尝试使用spring data cosmosdb项目中的cosmosTemplate实现查询
查询具有以下语法:
"select * from movie where ARRAY_CONTAINS(movie.countries, @country)"
CosmosTemplate接受DocumentQuery对象,该对象是基于Criteria对象构建的。Criteria对象支持一小部分基本谓词,如inoris equal等,但没有array_contains谓词
目前,查询是通过使用cosmos客户端(来自sdk(而不是cosmosTemplate执行的。这给我们带来了两个问题:

  1. 我们必须通过将cosmosTemplate和cosmos客户端一起使用来混合代码
  2. 由于我们有使用系统函数的复杂参数化查询,因此我们必须连接sql查询字符串并收集sql参数

这样的查询应该如何使用cosmosTemplate处理,这可能吗?

第页。我们使用的是com.microsoft.azure:azure-comossdb 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);
拉维的回答是正确的。要直接从SpringData连接器创建自定义查询,当前有两个选项。

首先,您可以按照";自定义查询">

https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/how-to-guides-spring-data-cosmosdb

指导您直接使用Java SDK CosmosClient。Spring Data连接器的当前GA版本没有@Query注释,这将启用自定义查询注释,这就是为什么您需要直接使用Java SDK。

第二,升级到最新的测试版,启用@Query annotation

https://mvnrepository.com/artifact/com.azure/azure-spring-data-cosmos

这方面的示例代码将在接下来的几天内发布,GA发布计划在9/30发布,所以等待时间不长。

经过对azure sdk的研究,我发现目前并不是所有的系统功能都支持cosmesTemplate
支持的系统功能列表可以在那里找到:

https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/query/CriteriaType.java

如果您不想编写使用系统函数的查询,而该查询不在上面链接的列表中,您可以使用@Query注释,也可以直接使用cosmos客户端而不是cosmos模板。

最新更新