【发布时间】:2015-12-22 00:12:12
【问题描述】:
我希望能够提供集合中所有文档的所有属性的列表。
我能想到的最好方法是查询所有文档,然后在客户端中构建列表,但这感觉不对。
【问题讨论】:
-
您希望回答哪种编程语言? C#、PowerShell?
标签: azure azure-cosmosdb
我希望能够提供集合中所有文档的所有属性的列表。
我能想到的最好方法是查询所有文档,然后在客户端中构建列表,但这感觉不对。
【问题讨论】:
标签: azure azure-cosmosdb
做你想做的事的唯一方法是阅读所有文件。但是,如果您担心带宽问题,则可以在只返回属性列表的存储过程中进行。
如果您采取这条路线,我建议您从 countDocuments sproc here 开始,并准备好根据需要多次调用,直到继续返回空且没有 429 错误...或使用 documentdb- utils 会为您解决这些问题。
或者,我可以在这里给你一个完整的例子。请告诉我。
另一种方法是在编写文档时维护一个属性列表。如果您经常需要此列表,这将是首选。
【讨论】:
您可以将具有任何结构的文档存储在集合中,它们可能都不同。 您不受限制在一个集合中存储来自同一“模式”的所有对象。
因此,获取集合上所有可用的属性并不是 DocumentDB API 或 SDK 真正支持的东西,您要么阅读整个集合,要么依赖于您在创建对象时制定的某种约定。
【讨论】:
您可以为此使用Slazure。下面的示例列出了给定文档集的所有属性名称:
using SysSurge.Slazure.AzureDocumentDB.Linq;
using SysSurge.Slazure.Core;
using SysSurge.Slazure.Core.Linq.QueryParser;
public void ShowPropertyNames()
{
// Get a reference to the TestCstomers collection
dynamic storage = new QueryableStorage<DynDocument>("URL=https://contoso.documents.azure.com:443/;DBID=DDBExample;TOKEN=VZ+qKPAkl9TtX==");
QueryableCollection<DynDocument> collection = storage.TestCustomers;
// Build collection query
var queryResult = collection.Where("SignedUpForNewsletter = true and Age < 22");
foreach (DynDocument document in queryResult)
{
foreach (KeyValuePair<string, IDynProperty> keyValuePair in document)
{
Console.WriteLine(keyValuePair.Key);
}
}
}
【讨论】: