В Azure DocumentDB, как я могу получить список всех свойств в коллекции?

#azure-cosmosdb

#azure #azure-cosmosdb

Вопрос:

Я хотел бы иметь возможность предоставить список всех свойств во всех документах в коллекции.

Лучший способ, который я могу придумать, — запросить все документы, а затем создать список в клиенте, но это кажется неправильным.

Комментарии:

1. На каком языке программирования вы ожидаете получить ответ? C#, PowerShell?

Ответ №1:

Единственный способ сделать то, что вы хотите, — это прочитать все документы. Однако, если вы беспокоитесь о пропускной способности, вы можете сделать это в хранимой процедуре, которая возвращает только список свойств.

Если вы выберете этот маршрут, я рекомендую вам начать с countDocuments sproc здесь и быть готовым вызывать столько раз, сколько необходимо, пока продолжение не вернется пустым и не будет 429 ошибок… или используйте documentdb-utils, который позаботится об этом за вас.

В качестве альтернативы я мог бы привести здесь полный пример. Просто дайте мне знать.

Другим подходом было бы ведение списка свойств по мере написания документов. Это было бы предпочтительнее, если вам часто нужен этот список.

Комментарии:

1. Все, что я предлагаю, — это более глубокий пример кода в моем ответе. Большинство ответов SO содержат примеры кода. Некоторые даже работают в jsfiddle. Изменил мой ответ, чтобы лучше представить это.

2. Ведение списка свойств по мере написания документов хорошо подходит для моего варианта использования. Спасибо за предложение!

Ответ №2:

Вы можете хранить документы с любой структурой в коллекции, все они могут быть разными. Вы не ограничены в коллекции для хранения всех объектов из одной и той же «схемы».

Таким образом, получение всех свойств, доступных в коллекции, на самом деле не поддерживается API DocumentDB или SDK, вы либо читаете всю коллекцию, либо полагаетесь на какое-то соглашение, которое вы делаете при создании объектов.

Ответ №3:

Для этого вы можете использовать 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);
        }
    }
}