Не удается найти любую опцию для создания коллекций в локальном хранилище Cosmos db / Azure - PullRequest
1 голос
/ 15 апреля 2020

Я работаю с Azure Функция и мне нужно добавить «Имя коллекции» в атрибуте cosmosdbtrigger, но там нет никакой опции для создания какой-либо коллекции, я могу только создавать контейнеры и, следовательно, во время выполнения кода в локальном хранилище это вызывает ошибку:

Не удалось запустить прослушиватель для функции 'Function1'. [15-04-2020 22:39:01] Не удалось запустить прослушиватель для функции «Function1». Microsoft. Azure .WebJobs.Extensions.CosmosDB: Либо исходная коллекция 'driverLocation' (в базе данных 'pizza'), либо коллекция аренды 'аренды' (в базе данных 'pizza') не существует. Обе коллекции должны существовать до запуска слушателя. Чтобы автоматически создать коллекцию аренды, установите для «CreateLeaseCollectionIfNotExists» значение «true». Microsoft. Azure .DocumentDB.Core: Сообщение: {"Ошибки": ["Ресурс не найден"]}

Ниже приведен стандартный код, который я использую, я создал базу данных и коллекция в эмуляторе dos космоса

public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([CosmosDBTrigger(
        databaseName: "pizza",
        collectionName: "driverLocation",
        ConnectionStringSetting = "pizzaConnection")] IReadOnlyList<Document> input,
            ILogger log)
        {
            if (input != null && input.Count > 0)
            {
                log.LogInformation("Documents modified " + input.Count);
                log.LogInformation("First document Id " + input[0].Id);
            }
        }
    }

Ниже мои local.settings. json file

    {
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet",
        "pizzaConnection": "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
    },
    "Host": {
        "LocalHttpPort": 7071,
        "CORS": "http://localhost:3872",
        "CORSCredentials": true
    }
}

1 Ответ

2 голосов
/ 16 апреля 2020

Вам необходимо создать коллекцию аренды (также известную как контейнер в CosmosDB и указать имя для вашей коллекции аренды в триггере Cosmos DB следующим образом:

public static class Function1
{
    [FunctionName("Function1")]
    public static void Run([CosmosDBTrigger(
    databaseName: "pizza",
    collectionName: "driverLocation",
    LeaseCollectionName = "leases"
    CreateLeaseCollectionIfNotExists: true,
    ConnectionStringSetting = "pizzaConnection")] IReadOnlyList<Document> input,
        ILogger log)
    {
        if (input != null && input.Count > 0)
        {
            log.LogInformation("Documents modified " + input.Count);
            log.LogInformation("First document Id " + input[0].Id);
        }
    }
}

Это должно создать контейнер аренды для вас, если он не существует. Чтобы создать свою коллекцию с помощью Azure Cosmos DB Emulator, вы должны увидеть следующий экран, где вы можете создать свой контейнер:

enter image description here

По сути, просто запустите эмулятор, откройте его, а затем нажмите «Новая коллекция». Заполните форму, чтобы создать свою коллекцию, и у вас должно получиться go.

Надеюсь, это поможет , если вам нужна дополнительная информация или у вас есть дополнительные вопросы, дайте мне знать:)

...