在不具有容器属性的宇宙中选择项目

问题描述

当我在一个容器上运行一个选择查询(“从c中选择前1个*”)时,我得到:

{
    "id": "102","sid": "s-102","name": "Bena","grade": "2","_rid": "ruxSAIiGPgYCAAAAAAAAAA==","_self": "dbs/ruxSAA==/colls/ruxSAIiGPgY=/docs/ruxSAIiGPgYCAAAAAAAAAA==/","_etag": "\"00006000-0000-1900-0000-5f4354320000\"","_attachments": "attachments/","_ts": 1598247986
}

我不想要_rid,_self,_etag等,我只想要实体 例如:

{
    "id": "102","grade": "2"
}

当前代码

    CosmosDatabase db1=client.getDatabase("Student");
    CosmosContainer c=db1.getContainer("Stu"); 
    CosmosQueryRequestOptions options = new CosmosQueryRequestOptions();
    options.setMaxBufferedItemCount(5);
    String sql = "SELECT TOP 1 *  FROM  s ";
    CosmosPagedIterable<JSONObject> cpi=c.queryItems(sql,options,JSONObject.class);

解决方法

您应该创建您实体的类(不要使用JSONObject)。 这是我的简单测试代码:

database = client.getDatabase(databaseName);
container = database.getContainer(containerName);
CosmosPagedIterable<User> usersPagedIterable  = container.queryItems("select top 1 * from c",new QueryRequestOptions(),User.class);
if(usersPagedIterable.iterator().hasNext()){
    User user = usersPagedIterable.iterator().next();
    System.out.println(user.toString());
}

debug的屏幕截图(没有_rid,_self,_etag等): enter image description here

,

将SQL更改为以下内容 SELECT TOP 1 s.id,s.sid,s.name,s.grade,FROM s

如果希望将结果反序列化为域对象,只需将其创建为java bean,然后将其传递给queryItems方法即可,而不是“ JSONObject.class”