gpt4 book ai didi

Azure Cosmos DB SQL API - 读取/查询具有未知数据结构的文档

转载 作者:行者123 更新时间:2023-12-03 05:27:57 25 4
gpt4 key购买 nike

我有一个 Cosmos DB,其容器中包含具有不同结构的文档。

我正在使用 Java SQL API 从此容器读取文档。

我遇到的问题是,用于查询/读取容器的 API 方法需要模型类作为输入参数,并将返回模型类的实例。因为我的容器包含具有不同字段和深度的文档,所以我不可能创建一个模型类来表示它。

我需要能够读取/查询文档,然后自己解析它并提取我正在查找的值。

有什么想法吗?我在 API 方法中使用了“Object”,例如queryItem 然后它返回一个我可以自己解析的 LinkedHashMap。这是这样做的方法吗?它看起来有点“原始”,但我还没有找到更好的方法。

下面是 SDK 文档中的典型示例。我无法在代码中创建“Family”模型类,因为不同文档的结构可能有所不同 - 存储哪些字段以及深度。

private void queryItems() {

CosmosQueryRequestOptions queryOptions = new CosmosQueryRequestOptions();
queryOptions.setQueryMetricsEnabled(true);

CosmosPagedIterable<Family> familiesPagedIterable = container.queryItems(
"SELECT * FROM Family WHERE Family.lastName IN ('Andersen', 'Wakefield', 'Johnson')", queryOptions, Family.class);

familiesPagedIterable.iterableByPage(10).forEach(cosmosItemPropertiesFeedResponse -> {
logger.info("Got a page of query result with {} items(s) and request charge of {}",
cosmosItemPropertiesFeedResponse.getResults().size(), cosmosItemPropertiesFeedResponse.getRequestCharge());

logger.info("Item Ids {}", cosmosItemPropertiesFeedResponse
.getResults()
.stream()
.map(Family::getId)
.collect(Collectors.toList()));
});
}

最佳答案

根据我的理解,它是由sdk函数的输入参数和输出数据类型决定的。确切地说,我们可以发现 java 的两个示例代码或spring取决于数据模型。因此,由于文档多种多样,在代码中使用 Object 对您来说确实有好处。

确实,我们无法设计一个数据模型来包含文档中的所有属性,但我认为设置一个包含所需所有属性的模型也是一个好主意。我的意思是,也许您在查询中有一个无用的属性,因此查询模型应该排除它。

关于Azure Cosmos DB SQL API - 读取/查询具有未知数据结构的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67375592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com