azure-cosmosdb - 如何在结果集中抑制 CosmosDB“默认”信息?
问题描述
我想抑制以下结果集中的 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 作为 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中项目的系统生成属性。
当然,您可以在 sql: 中过滤它们select c.topLevelCategory from c
,不要提及它们或使用select * from c
. 在sql中过滤是最好的方法,优于对结果集的二次处理。
更新答案:
您的情况是执行完全相同的查询,JOBJECT 不显示系统数据,但 Document 显示。
我的解释如下:
Document Class是 Document DB .NET 包的一个自包含基类。它具有以下生成属性:
SDK 会尝试将结果数据一一映射到你在CreateDocumentQuery<T>
.
所以实际上,你已经找到了解决方案。你可以定义你的自定义 pojo 来接收结果数据。只需在该 pojo 中包含您想要的属性,例如:
class Pojo : Document
{
public string id { get; set; }
public string name { get; set; }
}
这既有业务影响,也没有多余的字段。希望我对此很清楚。
推荐阅读
- ios - 导航栏在 IOS 13 中无法正确显示
- sql - 其中 x 字符等于值
- client-server - Hyperledger Fabric 相对于客户端-服务器模型的优势是什么
- node.js - 在 Joi 中返回多个错误
- python - 如何遍历字典而不跳过具有重复键的条目?
- javascript - 如何将变量的值作为键或参数传递给大括号内的变量?
- c# - ASPNET Core 中 ViewData 和 ViewBag 的问题
- r - 无法将数据从 FTP 服务器下载到闪亮服务器中的闪亮应用程序
- postgresql - 如何从 PostgreSQL 中的括号中获取数据?
- c# - C# 7 和通过事件聚合器进行元组转换