如何在结果集中抑制 CosmosDB "default" 信息?
How do I suppress CosmosDB "default" info in resultsets?
我想在以下结果集中隐藏 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,我不会得到系统数据,只有当我将 createDOcumentQuery as 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>();
这些是 Cosmos DB 中的 system-generated properties of items。
当然,你可以在sql中过滤它们:select c.topLevelCategory from c
,不要提及它们或使用select * from c
。在sql中筛选是最好的方法,优于对结果集进行二次处理。
更新答案:
您的情况正在执行完全相同的查询,JOBJECT 不显示系统数据但 Document 显示。
我的解释如下:
Document Class 是 Document DB .NET 的自包含基础 class package.It 具有以下生成属性:
SDK会尝试将结果数据一一映射到您在CreateDocumentQuery<T>
.
中定义的实体class
所以实际上,您已经发现 solution.You 可以定义您的自定义 pojo 来接收结果数据。只需在该 pojo 中包含您想要的属性,例如:
class Pojo : Document
{
public string id { get; set; }
public string name { get; set; }
}
这既会产生业务影响,又不会多余fields.Hope我很清楚这一点。
我想在以下结果集中隐藏 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,我不会得到系统数据,只有当我将 createDOcumentQuery as 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>();
这些是 Cosmos DB 中的 system-generated properties of items。
当然,你可以在sql中过滤它们:select c.topLevelCategory from c
,不要提及它们或使用select * from c
。在sql中筛选是最好的方法,优于对结果集进行二次处理。
更新答案:
您的情况正在执行完全相同的查询,JOBJECT 不显示系统数据但 Document 显示。
我的解释如下:
Document Class 是 Document DB .NET 的自包含基础 class package.It 具有以下生成属性:
SDK会尝试将结果数据一一映射到您在CreateDocumentQuery<T>
.
所以实际上,您已经发现 solution.You 可以定义您的自定义 pojo 来接收结果数据。只需在该 pojo 中包含您想要的属性,例如:
class Pojo : Document
{
public string id { get; set; }
public string name { get; set; }
}
这既会产生业务影响,又不会多余fields.Hope我很清楚这一点。