查询以搜索对象侧面数组中的值



如果匹配,我想在数组的对象内部应用条件,但我找不到任何可以使用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()); 

最新更新