CosmosDB SQL API Java SDK v.4 ReadAllItems 方法没有 return 结果
CosmosDB SQL API Java SDK v.4 ReadAllItems method does not return results
我在使用以下方法从 cosmos db sql api
获取结果时遇到了一些障碍:
.readAllItems(partitionKey, classType)
.readAllItems(partitionKey, options, classType)
当我有 class 的平面结构时,上述方法工作正常。我的意思是没有子 classes 嵌套在我的模型 class 中。下面是 class 示例,它不起作用:
public class Root {
public Root(){};
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Subclass getSubclass () {
return subclass;
}
public void setSubclass (Subclass subclass) {
this.subclass= subclass;
}
private String id = "";
private Subclass subclass= new Subclass ();
}
我的 subclass 为简单起见只包含 partitionKey。
public class Subclass {
public String getPk() { return pk; }
public void setPk(String pk) {
this.pk = pk;
}
private String pk="";
}
有了这样的“结构”,我可以使用适当的分区键值轻松地在容器内创建项目,但我无法仅使用 partitionKey
值再次加载它们。这是从 cosmosdb
.
读取它们的代码片段
PartitionKey partitionKey = new PartitionKey("properValueWhichWorksWithNoNestedClassesInsideRoot");
CosmosPagedFlux<Root> pagedFluxResponse = container.readAllItems(partitionKey, Root.class);
try {
double totalRequestCharge = pagedFluxResponse.byPage(preferredPageSize).flatMap(fluxResponse -> {
entities.addAll(fluxResponse.getResults());
return Mono.just(fluxResponse.getRequestCharge());
})
.reduce(0.0, (x1, x2) -> x1 + x2)
.block();
logger.info("Query charge: {}", totalRequestCharge);
} catch(Exception err) {
err.printStackTrace();
}
return entities;
我不太确定我做错了什么还是错误,因为我使用与 .queryItems(query, queryOptions, classType)
相同的代码,returns CosmosPageFlux
而不是 .readAllItems
,它工作得很好。
我使用这样的依赖:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-cosmos</artifactId>
<version>LATEST</version>
</dependency>
我还使用了一些特定版本而不是 LATEST
,但它不起作用。
我在身边测试了一下,发现了一些有趣的东西。
readAllItems
是SqlQuery实现的一个函数,所以当我调试你把partition key放在sub 属性的情况时,它会生成一个sql这样的:
所以,显然它可以得到任何响应,因此 readAllItems returns none 的结果。你最好直接使用queryItems。
我在使用以下方法从 cosmos db sql api
获取结果时遇到了一些障碍:
.readAllItems(partitionKey, classType)
.readAllItems(partitionKey, options, classType)
当我有 class 的平面结构时,上述方法工作正常。我的意思是没有子 classes 嵌套在我的模型 class 中。下面是 class 示例,它不起作用:
public class Root {
public Root(){};
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Subclass getSubclass () {
return subclass;
}
public void setSubclass (Subclass subclass) {
this.subclass= subclass;
}
private String id = "";
private Subclass subclass= new Subclass ();
}
我的 subclass 为简单起见只包含 partitionKey。
public class Subclass {
public String getPk() { return pk; }
public void setPk(String pk) {
this.pk = pk;
}
private String pk="";
}
有了这样的“结构”,我可以使用适当的分区键值轻松地在容器内创建项目,但我无法仅使用 partitionKey
值再次加载它们。这是从 cosmosdb
.
PartitionKey partitionKey = new PartitionKey("properValueWhichWorksWithNoNestedClassesInsideRoot");
CosmosPagedFlux<Root> pagedFluxResponse = container.readAllItems(partitionKey, Root.class);
try {
double totalRequestCharge = pagedFluxResponse.byPage(preferredPageSize).flatMap(fluxResponse -> {
entities.addAll(fluxResponse.getResults());
return Mono.just(fluxResponse.getRequestCharge());
})
.reduce(0.0, (x1, x2) -> x1 + x2)
.block();
logger.info("Query charge: {}", totalRequestCharge);
} catch(Exception err) {
err.printStackTrace();
}
return entities;
我不太确定我做错了什么还是错误,因为我使用与 .queryItems(query, queryOptions, classType)
相同的代码,returns CosmosPageFlux
而不是 .readAllItems
,它工作得很好。
我使用这样的依赖:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-cosmos</artifactId>
<version>LATEST</version>
</dependency>
我还使用了一些特定版本而不是 LATEST
,但它不起作用。
我在身边测试了一下,发现了一些有趣的东西。
readAllItems
是SqlQuery实现的一个函数,所以当我调试你把partition key放在sub 属性的情况时,它会生成一个sql这样的:
所以,显然它可以得到任何响应,因此 readAllItems returns none 的结果。你最好直接使用queryItems。