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。