在 Azure DocumentDB 中,如何获取集合中所有属性的列表?

In Azure DocumentDB, how can I get a list of all properties in a collection?

我希望能够提供集合中所有文档的所有属性列表。

我能想到的最好的方法是查询所有文档,然后在客户端中构建列表,但这感觉不对。

做你想做的唯一方法是阅读所有文档。但是,如果您担心带宽,那么您可以在只有 returns 属性列表的存储过程中完成。

如果您选择这条路线,我建议您从 countDocuments 存储过程 here 开始,并准备好根据需要多次调用,直到继续返回为空并且没有 429 错误...或使用 documentdb-utils 为您处理。

或者,我可以在这里给你一个完整的例子。请告诉我。

另一种方法是在编写文档时维护一个属性列表。如果您经常需要此列表,这将是首选。

您可以在集合中存储任何结构的文档,它们可以完全不同。 您不限于在一个集合中存储来自同一 "schema".

的所有对象

因此,获取集合上的所有可用属性并不是 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);
        }
    }
}