如何在结果集中隐藏CosmosDB“默认”信息?

时间:2019-08-12 05:36:28

标签: azure-cosmosdb azure-cosmosdb-sqlapi

我想在下面的结果集中隐藏CosmosDB信息,那怎么办?

 {
            "id": null,
            "_rid": null,
            "_self": null,
            "_ts": 0,
            "_etag": null,
            "topLevelCategory": "Shorts,Skirt"
 },

这当然是摘录,但我不想显示ID等,因为它们在此结果中没有任何作用,但我不知道如何隐藏该信息。

我希望以下

 {
            "topLevelCategory": "Shorts,Skirt"
 },

查询如下

 $"SELECT DISTINCT locales.categories[0] AS topLevelCategory " +
                                                 $"FROM c JOIN locales in c.locales " +
                                                 $"WHERE locales.country = '{apiInputObject.Locale}' " +
                                                 $"AND locales.language = '{apiInputObject.Language}'";

有趣的是,如果我将结果强制转换为JOBJECT,但我没有获取系统数据,则仅当我将DOcumentQuery创建为DOcument时才能获取它,因此解决方法如下:

IQueryable<JObject> queryResultSet = client.CreateDocumentQuery<JObject>(UriFactory.CreateDocumentCollectionUri(databaseName, databaseCollection), parsedQueryObject.SqlStatement, queryOptions);

但是还有其他异步问题,但是上面没有显示系统生成的ID,但是下面的显示了

 var query = client.CreateDocumentQuery<Document>(UriFactory.CreateDocumentCollectionUri(databaseName, databaseCollection), parsedQueryObject.SqlStatement, queryOptions).AsDocumentQuery();
                        var result = await query.ExecuteNextAsync<Document>();

1 个答案:

答案 0 :(得分:1)

这些是Cosmos DB中的system-generated properties of items

enter image description here

当然,您可以在sql中过滤它们:select c.topLevelCategory from c,不要提及它们或使用select * from c。 sql过滤是最好的方法,比对结果集的二次处理要好。


更新答案:

您的情况正在执行完全相同的查询,JOBJECT不会显示系统数据,但文档会显示。

我的解释如下:

Document Class是Document DB .NET程序包的自包含基类。它具有以下生成属性:

enter image description here

SDK将尝试将结果数据一一映射到您在CreateDocumentQuery<T>中定义的实体类。

因此,实际上,您已经找到了解决方案。您可以定义自定义pojo来接收结果数据。只需在该pojo中包含您想要的属性即可,例如:

class Pojo : Document
    {
        public string id { get; set; }
        public string name { get; set; }
    }

这既有业务影响,也没有多余的字段。希望我对此很清楚。