如果匹配,我想在数组的对象内部应用条件,但我找不到任何可以使用spring-data-cosmosdb
库找到的文档或示例。我正在使用2.3.0
版本的库。
Json 示例
{
"id" : 1,
"address" : [
{
"street" : "abc"
...
},
{
"street" : "efg"
...
}
]
}
我想搜索其中address
的街道名称等于"abc"
的所有文档。下面是我用来在cosmosDb中搜索的spring-boot代码。但它并没有返回预期的结果。
List<Criteria> criteriaList = new ArrayList<>();
criteriaList.add(Criteria.getInstance(CriteriaType.IN, "addresses.street", Collections.singletonList("abc")));
List<User> users = cosmosTemplate.find(new DocumentQuery(criteriaList.get(0), CriteriaType.AND)), User.class, COLLECTION_NAME);
我也尝试过address[0].street
,但它抛出了不支持的操作异常。
强烈建议升级到spring-data cosmosdb v3(至少3.22.0版本(。v2连接器已经存在一段时间了。使用最新的连接器,以下内容将实现您的目标。
Criteria filterCriteria = Criteria.getInstance(CriteriaType.ARRAY_CONTAINS, "address",
Collections.singletonList(new ObjectMapper().readTree("{"street":"abc"}")),
Part.IgnoreCaseType.NEVER);
CosmosQuery cosmosQuery = new CosmosQuery(filterCriteria);
Iterable<User> results = cosmosTemplate.find(cosmosQuery, User.class, COLLECTION_NAME);
for (User user : results)
System.out.println("doc id: " + user.getId());