首页 > 解决方案 > 带有子文档的 Azure cosmos Db Criteria 查询 - java spring boot

问题描述

我是 azure cosmos db 的新手。我正在尝试从我的 Spring Boot 应用程序中的容器中读取项目。我正在使用带有标准的 cosmos 模板。假设我有这样的文件

{
    "stop_id": 70021,
    "stop_name": "CALTRAIN - 22ND ST STATION",
    "stop_lat": 37.757692,
    "stop_lon": -122.392318,
    "zone_id": 3329,
    "trip": [{
        "trip_id": "RTD8997283",
        "arrival_time": "05:40:00",
        "departure_time": "05:40:00",
        "stop_id": 70021,
        "stop_sequence": 1
    }, {
        "trip_id": "RTD8997283",
        "arrival_time": "05:52:00",
        "departure_time": "05:52:00",
        "stop_id": 70021,
        "stop_sequence": 2
    }]
}

如果我想根据停止 id 获取,我可以像这样添加停止 id 的条件

Criteria criteria = Criteria.getInstance(CriteriaType.IS_EQUAL, "stop_id", Collections.singletonList("70021"), Part.IgnoreCaseType.ALWAYS);
CosmosQuery cosmosQuery = new CosmosQuery(criteria).with(Sort.unsorted());
Iterable<StopInfo> items = cosmosTemplate.find(cosmosQuery, StopInfo.class, "myContainer");

但是,如果我想为旅行 ID 添加条件,我该怎么做?

标签: javaspring-bootnosqlazure-cosmosdbcriteria

解决方案


这样,您可以使用条件从 cosmos 中的数组中搜索

Map map = new HashMap();
map.put("trip_id","RTD8997283");
Criteria criteria = Criteria.getInstance(CriteriaType.ARRAY_CONTAINS, "trip", Collections.singletonList(map), Part.IgnoreCaseType.ALWAYS);
CosmosQuery cosmosQuery = new CosmosQuery(criteria).with(Sort.unsorted());
Iterable<StopInfo> items = cosmosTemplate.find(cosmosQuery, StopInfo.class, "myContainer");

推荐阅读