Привязки Azure Cosmos DB для службы "Функции Azure" версии 2.хAzure Cosmos DB bindings for Azure Functions 2.x

В этой статье описано, как использовать привязки Azure Cosmos DB в службе "Функции Azure" версии 2.x.This article explains how to work with Azure Cosmos DB bindings in Azure Functions 2.x. Служба "Функции Azure" поддерживает привязки триггера, а также входные и выходные привязки для Azure Cosmos DB.Azure Functions supports trigger, input, and output bindings for Azure Cosmos DB.

Примечание

Эта статья предназначена для службы "Функции Azure" версии 2.x.This article is for Azure Functions version 2.x. Для получения дополнительных сведений об использовании Функций версии 1.x см. раздел Функции 1.х.For information about how to use these bindings in Functions 1.x, see Azure Cosmos DB bindings for Azure Functions 1.x.

Эта привязка называлась DocumentDB.This binding was originally named DocumentDB. В Функциях версии 2.x триггер, привязки и пакет вместе называются Cosmos DB.In Functions version 2.x, the trigger, bindings, and package are all named Cosmos DB.

Это справочные сведения для разработчиков функций Azure.This is reference information for Azure Functions developers. Если вы новичок в функциях Azure, начните со следующих ресурсов:If you're new to Azure Functions, start with the following resources:

Поддерживаемые APISupported APIs

Привязки Azure Cosmos DB поддерживаются только для использования с API SQL.Azure Cosmos DB bindings are only supported for use with the SQL API. Для всех других API Azure Cosmos DB доступ к базе данных из функции должен осуществляться с использованием статического клиента для API, включая API базы данны Azure Cosmos для MongoDB, API Cassandra, API Gremlin и API таблиц.For all other Azure Cosmos DB APIs, you should access the database from your function by using the static client for your API, including Azure Cosmos DB's API for MongoDB, Cassandra API, Gremlin API, and Table API.

Пакеты — Функции 2.xPackages - Functions 2.x

Привязки Azure Cosmos DB для Функций версии 2.x доступны в пакете NuGet Microsoft.Azure.WebJobs.Extensions.CosmosDB версии 3.х.The Azure Cosmos DB bindings for Functions version 2.x are provided in the Microsoft.Azure.WebJobs.Extensions.CosmosDB NuGet package, version 3.x. Исходный код для привязок находится в репозитории GitHub azure-webjobs-sdk-extensions.Source code for the bindings is in the azure-webjobs-sdk-extensions GitHub repository.

В следующей таблице указано как добавить поддержку для этой привязки в каждой среде разработки.The following table tells how to add support for this binding in each development environment.

Среда разработкиDevelopment environment Для добавления поддержки вTo add support in
Функции 2.xFunctions 2.x
Локальная разработка – библиотека классов C#Local development - C# class library Установка пакетаInstall the package
Локальная разработка — скрипт C#, JavaScript, F#, Java и PythonLocal development - C# script, JavaScript, F#, Java and Python Регистрация расширенияRegister the extension
Разработка на порталеPortal development Установка при добавлении выходной привязкиInstall when adding output binding

Дополнительные сведения об обновлении существующих расширений привязки на портале, не переиздавая проект приложения-функции, см. раздел Обновление расширений.To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

ТриггерTrigger

Триггер Azure Cosmos DB использует канал изменений Azure Cosmos DB для ожидания вставок и обновлений в разных разделах.The Azure Cosmos DB Trigger uses the Azure Cosmos DB Change Feed to listen for inserts and updates across partitions. На канале изменений публикуются вставки и обновления, а не удаления.The change feed publishes inserts and updates, not deletions.

Пример триггераTrigger - example

Языковой пример см. в разделах:See the language-specific example:

Пропустить примеры триггеровSkip trigger examples

Пример C# в триггереTrigger - C# example

В следующем примере показана функция C#, вызываемая при вставке или обновлении в указанной базе данных и коллекции.The following example shows a C# function that is invoked when there are inserts or updates in the specified database and collection.

using Microsoft.Azure.Documents;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;

namespace CosmosDBSamplesV2
{
    public static class CosmosTrigger
    {
        [FunctionName("CosmosTrigger")]
        public static void Run([CosmosDBTrigger(
            databaseName: "ToDoItems",
            collectionName: "Items",
            ConnectionStringSetting = "CosmosDBConnection",
            LeaseCollectionName = "leases",
            CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
            ILogger log)
        {
            if (documents != null && documents.Count > 0)
            {
                log.LogInformation($"Documents modified: {documents.Count}");
                log.LogInformation($"First document Id: {documents[0].Id}");
            }
        }
    }
}

Пропустить примеры триггеровSkip trigger examples

Пример скрипта C# в триггереTrigger - C# script example

В следующем примере показаны привязка триггера Cosmos DB в файле function.json и функция сценария C#, которая использует эту привязку.The following example shows a Cosmos DB trigger binding in a function.json file and a C# script function that uses the binding. При изменении записей в Cosmos DB функция записывает сообщения в журнале.The function writes log messages when Cosmos DB records are modified.

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "type": "cosmosDBTrigger",
    "name": "documents",
    "direction": "in",
    "leaseCollectionName": "leases",
    "connectionStringSetting": "<connection-app-setting>",
    "databaseName": "Tasks",
    "collectionName": "Items",
    "createLeaseCollectionIfNotExists": true
}

Ниже приведен код скрипта C#.Here's the C# script code:

    #r "Microsoft.Azure.DocumentDB.Core"

    using System;
    using Microsoft.Azure.Documents;
    using System.Collections.Generic;
    using Microsoft.Extensions.Logging;

    public static void Run(IReadOnlyList<Document> documents, ILogger log)
    {
      log.LogInformation("Documents modified " + documents.Count);
      log.LogInformation("First document Id " + documents[0].Id);
    }

Пропустить примеры триггеровSkip trigger examples

Пример JavaScript в триггереTrigger - JavaScript example

В следующем примере показаны привязка триггера Cosmos DB в файле function.json и функция JavaScript, которая использует эту привязку.The following example shows a Cosmos DB trigger binding in a function.json file and a JavaScript function that uses the binding. При изменении записей в Cosmos DB функция записывает сообщения в журнале.The function writes log messages when Cosmos DB records are modified.

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "type": "cosmosDBTrigger",
    "name": "documents",
    "direction": "in",
    "leaseCollectionName": "leases",
    "connectionStringSetting": "<connection-app-setting>",
    "databaseName": "Tasks",
    "collectionName": "Items",
    "createLeaseCollectionIfNotExists": true
}

Ниже показан код JavaScript.Here's the JavaScript code:

    module.exports = function (context, documents) {
      context.log('First document Id modified : ', documents[0].id);

      context.done();
    }

Пример Java в триггереTrigger - Java example

В следующем примере показаны привязка триггера Cosmos DB в файле function.json и функция Java, которая использует эту привязку.The following example shows a Cosmos DB trigger binding in function.json file and a Java function that uses the binding. Эта функция используется при вставке или обновлении в указанной базе данных и коллекции.The function is involved when there are inserts or updates in the specified database and collection.

{
    "type": "cosmosDBTrigger",
    "name": "items",
    "direction": "in",
    "leaseCollectionName": "leases",
    "connectionStringSetting": "AzureCosmosDBConnection",
    "databaseName": "ToDoList",
    "collectionName": "Items",
    "createLeaseCollectionIfNotExists": false
}

Ниже приведен код Java.Here's the Java code:

    @FunctionName("cosmosDBMonitor")
    public void cosmosDbProcessor(
        @CosmosDBTrigger(name = "items",
            databaseName = "ToDoList",
            collectionName = "Items",
            leaseCollectionName = "leases",
            createLeaseCollectionIfNotExists = true,
            connectionStringSetting = "AzureCosmosDBConnection") String[] items,
            final ExecutionContext context ) {
                context.getLogger().info(items.length + "item(s) is/are changed.");
            }

В библиотеке среды выполнения функций Java используйте заметку @CosmosDBTrigger для параметров, значения которых будут поступать из Cosmos DB.In the Java functions runtime library, use the @CosmosDBTrigger annotation on parameters whose value would come from Cosmos DB. Эту аннотацию можно использовать с собственными типами Java, POJO или значениями, допускающими значение null, с помощью необязательного<T >.This annotation can be used with native Java types, POJOs, or nullable values using Optional<T>.

Пропустить примеры триггеровSkip trigger examples

Пример Python: триггерTrigger - Python example

В следующем примере показаны привязка триггера Cosmos DB в файле function.json и функция Python, которая использует эту привязку.The following example shows a Cosmos DB trigger binding in a function.json file and a Python function that uses the binding. При изменении записей в Cosmos DB функция записывает сообщения в журнале.The function writes log messages when Cosmos DB records are modified.

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "name": "documents",
    "type": "cosmosDBTrigger",
    "direction": "in",
    "leaseCollectionName": "leases",
    "connectionStringSetting": "<connection-app-setting>",
    "databaseName": "Tasks",
    "collectionName": "Items",
    "createLeaseCollectionIfNotExists": true
}

Ниже приведен код Python.Here's the Python code:

    import logging
    import azure.functions as func


    def main(documents: func.DocumentList) -> str:
        if documents:
            logging.info('First document Id modified: %s', documents[0]['id'])

C# атрибуты триггераTrigger - C# attributes

В библиотеках классов C# используйте атрибут CosmosDBTrigger.In C# class libraries, use the CosmosDBTrigger attribute.

Конструктор атрибута принимает имя базы данных и имя коллекции.The attribute's constructor takes the database name and collection name. Дополнительные сведения о параметрах и других свойствах, которые можно настроить, см. в разделе Конфигурация триггера.For information about those settings and other properties that you can configure, see Trigger - configuration. Ниже приведен пример атрибута CosmosDBTrigger в сигнатуре метода:Here's a CosmosDBTrigger attribute example in a method signature:

    [FunctionName("DocumentUpdates")]
    public static void Run(
        [CosmosDBTrigger("database", "collection", ConnectionStringSetting = "myCosmosDB")]
    IReadOnlyList<Document> documents,
        ILogger log)
    {
        ...
    }

Полный пример см. в разделе Пример C# в триггере.For a complete example, see Trigger - C# example.

Конфигурация триггераTrigger - configuration

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json и атрибуте CosmosDBTrigger.The following table explains the binding configuration properties that you set in the function.json file and the CosmosDBTrigger attribute.

свойство function.jsonfunction.json property Свойство атрибутаAttribute property ОПИСАНИЕDescription
typetype Нужно задать значение cosmosDBTrigger.Must be set to cosmosDBTrigger.
directiondirection Нужно задать значение in.Must be set to in. Этот параметр задается автоматически при создании триггера на портале Azure.This parameter is set automatically when you create the trigger in the Azure portal.
namename Имя переменной, используемое в коде функции, представляющей список документов с изменениями.The variable name used in function code that represents the list of documents with changes.
connectionStringSettingconnectionStringSetting ConnectionStringSettingConnectionStringSetting Имя параметра приложения, содержащего строку подключения, используемую для подключения к отслеживаемой учетной записи Azure Cosmos DB.The name of an app setting that contains the connection string used to connect to the Azure Cosmos DB account being monitored.
databaseNamedatabaseName DatabaseNameDatabaseName Имя базы данных Azure Cosmos DB с отслеживаемой коллекцией.The name of the Azure Cosmos DB database with the collection being monitored.
collectionNamecollectionName CollectionNameCollectionName Имя отслеживаемой коллекции.The name of the collection being monitored.
leaseConnectionStringSettingleaseConnectionStringSetting LeaseConnectionStringSettingLeaseConnectionStringSetting (Необязательно.) Имя параметра приложения, содержащее строку подключения для службы, содержащей коллекцию аренды.(Optional) The name of an app setting that contains the connection string to the service which holds the lease collection. Если значение не задано, используется значение connectionStringSetting.When not set, the connectionStringSetting value is used. Этот параметр задается автоматически при создании привязки на портале.This parameter is automatically set when the binding is created in the portal. Строка подключения для коллекции аренд должна иметь разрешения на запись.The connection string for the leases collection must have write permissions.
leaseDatabaseNameleaseDatabaseName LeaseDatabaseNameLeaseDatabaseName (Необязательно.) Имя базы данных, в которой содержится коллекция, используемая для хранения аренд.(Optional) The name of the database that holds the collection used to store leases. Если значение не задано, используется значение параметра databaseName.When not set, the value of the databaseName setting is used. Этот параметр задается автоматически при создании привязки на портале.This parameter is automatically set when the binding is created in the portal.
leaseCollectionNameleaseCollectionName LeaseCollectionNameLeaseCollectionName (Необязательно.) Имя коллекции, используемой для хранения аренд.(Optional) The name of the collection used to store leases. Если значение не задано, используется значение leases.When not set, the value leases is used.
createLeaseCollectionIfNotExistscreateLeaseCollectionIfNotExists CreateLeaseCollectionIfNotExistsCreateLeaseCollectionIfNotExists (Необязательно.) Если задано значение true, коллекция аренд создается автоматически, если она не создана.(Optional) When set to true, the leases collection is automatically created when it doesn't already exist. По умолчанию используется значение false.The default value is false.
leasesCollectionThroughputleasesCollectionThroughput LeasesCollectionThroughputLeasesCollectionThroughput (Необязательно.) Определяет количество единиц запросов для назначения при создании коллекции аренд.(Optional) Defines the amount of Request Units to assign when the leases collection is created. Этот параметр используется, только если для createLeaseCollectionIfNotExists задано значение true.This setting is only used When createLeaseCollectionIfNotExists is set to true. Этот параметр задается автоматически при создании привязки с помощью портала.This parameter is automatically set when the binding is created using the portal.
leaseCollectionPrefixleaseCollectionPrefix LeaseCollectionPrefixLeaseCollectionPrefix (Дополнительно) Если параметр задан, то он добавляет префикс к созданной аренде в коллекции аренды для этой функции, позволяя двум разным функциям Azure совместно эффективно использовать коллекцию аренд с помощью различных префиксов.(Optional) When set, it adds a prefix to the leases created in the Lease collection for this Function, effectively allowing two separate Azure Functions to share the same Lease collection by using different prefixes.
feedPollDelayfeedPollDelay FeedPollDelayFeedPollDelay (Дополнительно) Если параметр задан, то он определяет задержку между опросами секции на наличие новых изменений в веб-канале, после того как все текущие изменения будут утеряны (в миллисекундах).(Optional) When set, it defines, in milliseconds, the delay in between polling a partition for new changes on the feed, after all current changes are drained. По умолчанию это 5000 (5 секунд).Default is 5000 (5 seconds).
leaseAcquireIntervalleaseAcquireInterval LeaseAcquireIntervalLeaseAcquireInterval (Дополнительно) Если параметр задан, то он определяет интервал для запуска задачи вычисления при условии равномерности распределения секций между известными экземплярами узла (в миллисекундах).(Optional) When set, it defines, in milliseconds, the interval to kick off a task to compute if partitions are distributed evenly among known host instances. По умолчанию это 13000 (13 секунд).Default is 13000 (13 seconds).
leaseExpirationIntervalleaseExpirationInterval LeaseExpirationIntervalLeaseExpirationInterval (Дополнительно) Если параметр задан, то он определяет интервал, за который берется аренда, представляющая секцию (в миллисекундах).(Optional) When set, it defines, in milliseconds, the interval for which the lease is taken on a lease representing a partition. Если аренда не будет обновлена в течение этого интервала, это приведет к ее истечению и владение секцией перейдет к другому экземпляру.If the lease is not renewed within this interval, it will cause it to expire and ownership of the partition will move to another instance. По умолчанию это 60000 (60 секунд).Default is 60000 (60 seconds).
leaseRenewIntervalleaseRenewInterval LeaseRenewIntervalLeaseRenewInterval (Дополнительно) Если параметр задан, то он определяет интервал продления для всех аренд в разделах, которые на данный момент занятые экземплярами (в миллисекундах).(Optional) When set, it defines, in milliseconds, the renew interval for all leases for partitions currently held by an instance. По умолчанию это 17000 (17 секунд).Default is 17000 (17 seconds).
checkpointFrequencycheckpointFrequency CheckpointFrequencyCheckpointFrequency (Дополнительно) Если параметр задан, то он определяет интервал между контрольными точками аренды (в миллисекундах).(Optional) When set, it defines, in milliseconds, the interval between lease checkpoints. После каждого вызова функции всегда используется значение по умолчанию.Default is always after each Function call.
maxItemsPerInvocationmaxItemsPerInvocation MaxItemsPerInvocationMaxItemsPerInvocation Используемых Если этот параметр задан, это свойство задает максимальное количество элементов, получаемых за вызов функции.(Optional) When set, this property sets the maximum amount of items received per Function call. Если операции в отслеживаемой коллекции выполняются с помощью хранимых процедур, область транзакции сохраняется при считывании элементов из веб-канала изменений.If operations in the monitored collection are performed through stored procedures, transaction scope is preserved when reading items from the Change Feed. Таким образом, количество полученных элементов может быть выше указанного значения, чтобы элементы, измененные одной транзакцией, возвращались как часть одного атомарного пакета.As a result of this, it's possible for the amount of items received to be higher than the specified value so that the items changed by the same transaction are returned as part of one atomic batch.
startFromBeginningstartFromBeginning StartFromBeginningStartFromBeginning (Необязательно.) Если параметр задан, значит, триггер может начать чтение изменений с начала журнала коллекции, а не с текущего момента времени.(Optional) When set, it tells the Trigger to start reading changes from the beginning of the history of the collection instead of the current time. Это возможно только при первом запуске триггера, так как при последующих запусках контрольные точки уже будут сохранены.This only works the first time the Trigger starts, as in subsequent runs, the checkpoints are already stored. Если установить значение true для этого параметра при уже созданных арендах, этот параметр не будет иметь никакого эффекта.Setting this to true when there are leases already created has no effect.

При локальной разработке параметры приложения перейдут в файл local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Использование триггераTrigger - usage

Триггеру требуется вторая коллекция, которая используется для хранения аренды в разделах.The trigger requires a second collection that it uses to store leases over the partitions. Отслеживаемая коллекция и та, в которой содержатся аренды, должны быть доступны для успешной работы триггера.Both the collection being monitored and the collection that contains the leases must be available for the trigger to work.

Важно!

Если несколько функций настроены на использование триггера Cosmos DB для одной и той же коллекции, то каждая из функций должна использовать выделенную коллекцию аренды или указывать на другой префикс LeaseCollectionPrefix для каждой функции.If multiple functions are configured to use a Cosmos DB trigger for the same collection, each of the functions should use a dedicated lease collection or specify a different LeaseCollectionPrefix for each function. В противном случае активируется только одна из функций.Otherwise, only one of the functions will be triggered. Сведения о префиксе см. в разделе с конфигурацией.For information about the prefix, see the Configuration section.

Триггер не указывает, был ли документ обновлен или вставлен. Вместо этого он представляет сам документ.The trigger doesn't indicate whether a document was updated or inserted, it just provides the document itself. Если операции обновления и вставки необходимо обрабатывать по-разному, это можно сделать, внедрив поля меток времени для операций обновления и вставки.If you need to handle updates and inserts differently, you could do that by implementing timestamp fields for insertion or update.

Входные данныеInput

Входная привязка Azure Cosmos DB извлекает один или несколько документов из Azure Cosmos DB и передает их входному параметру функции через API SQL.The Azure Cosmos DB input binding uses the SQL API to retrieve one or more Azure Cosmos DB documents and passes them to the input parameter of the function. Идентификатор документа или параметры запроса можно определить по триггеру, который вызывает функцию.The document ID or query parameters can be determined based on the trigger that invokes the function.

Примечание

Если коллекция секционирована, операции уточняющего запроса необходимо также указать значение ключа секции.If the collection is partitioned, lookup operations need to also specify the partition key value.

Примеры входных данныхInput - examples

См. примеры (для разных языков), в которых для считывания одного документа указывается значение идентификатора:See the language-specific examples that read a single document by specifying an ID value:

Пропустить примеры входных данныхSkip input examples

Примеры входных данных C#Input - C# examples

В этом разделе содержатся следующие примеры:This section contains the following examples:

В примерах используется ToDoItem простого типа:The examples refer to a simple ToDoItem type:

namespace CosmosDBSamplesV2
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string PartitionKey { get; set; }
        public string Description { get; set; }
    }
}

Пропустить примеры входных данныхSkip input examples

Триггер очереди, поисковый идентификатор из JSON (C#)Queue trigger, look up ID from JSON (C#)

В следующем примере показана функция C#, которая получает один документ.The following example shows a C# function that retrieves a single document. Функция активируется сообщением из очереди, который содержит объект JSON.The function is triggered by a queue message that contains a JSON object. Триггер очереди анализирует JSON в объект с именем ToDoItemLookup, который содержит идентификатор и значение ключа секции для поиска.The queue trigger parses the JSON into an object named ToDoItemLookup, which contains the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения ToDoItem документа из указанной базы данных и коллекции.That ID and partition key value are used to retrieve a ToDoItem document from the specified database and collection.

namespace CosmosDBSamplesV2
{
    public class ToDoItemLookup
    {
        public string ToDoItemId { get; set; }

        public string ToDoItemPartitionKeyValue { get; set; }
    }
}
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace CosmosDBSamplesV2
{
    public static class DocByIdFromJSON
    {
        [FunctionName("DocByIdFromJSON")]
        public static void Run(
            [QueueTrigger("todoqueueforlookup")] ToDoItemLookup toDoItemLookup,
            [CosmosDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{ToDoItemId}",
                PartitionKey = "{ToDoItemPartitionKeyValue}")]ToDoItem toDoItem,
            ILogger log)
        {
            log.LogInformation($"C# Queue trigger function processed Id={toDoItemLookup?.ToDoItemId} Key={toDoItemLookup?.ToDoItemPartitionKeyValue}");

            if (toDoItem == null)
            {
                log.LogInformation($"ToDo item not found");
            }
            else
            {
                log.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
            }
        }
    }
}

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, поисковый идентификатор из строки запроса (C#)HTTP trigger, look up ID from query string (C#)

В следующем примере показана функция C#, которая получает один документ.The following example shows a C# function that retrieves a single document. Функция активируется HTTP-запросом, который использует строку запроса для указания идентификатора и значения ключа секции для поиска.The function is triggered by an HTTP request that uses a query string to specify the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения ToDoItem документа из указанной базы данных и коллекции.That ID and partition key value are used to retrieve a ToDoItem document from the specified database and collection.

Примечание

Параметры строки запроса HTTP задаются с учетом регистра.The HTTP query string parameter is case-sensitive.

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace CosmosDBSamplesV2
{
    public static class DocByIdFromQueryString
    {
        [FunctionName("DocByIdFromQueryString")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
                HttpRequest req,
            [CosmosDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{Query.id}",
                PartitionKey = "{Query.partitionKey}")] ToDoItem toDoItem,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            if (toDoItem == null)
            {
                log.LogInformation($"ToDo item not found");
            }
            else
            {
                log.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
            }
            return new OkResult();
        }
    }
}

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, поисковый идентификатор из данных маршрута (C#)HTTP trigger, look up ID from route data (C#)

В следующем примере показана функция C#, которая получает один документ.The following example shows a C# function that retrieves a single document. Функция активируется HTTP-запросом, который использует данные маршрута для указания идентификатора и значения ключа секции для поиска.The function is triggered by an HTTP request that uses route data to specify the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения ToDoItem документа из указанной базы данных и коллекции.That ID and partition key value are used to retrieve a ToDoItem document from the specified database and collection.

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace CosmosDBSamplesV2
{
    public static class DocByIdFromRouteData
    {
        [FunctionName("DocByIdFromRouteData")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post",
                Route = "todoitems/{partitionKey}/{id}")]HttpRequest req,
            [CosmosDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{id}",
                PartitionKey = "{partitionKey}")] ToDoItem toDoItem,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            if (toDoItem == null)
            {
                log.LogInformation($"ToDo item not found");
            }
            else
            {
                log.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
            }
            return new OkResult();
        }
    }
}

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, поисковый идентификатор из данных маршрута, используется SqlQuery (C#)HTTP trigger, look up ID from route data, using SqlQuery (C#)

В следующем примере показана функция C#, которая получает один документ.The following example shows a C# function that retrieves a single document. Функция инициируется HTTP-запросом, в котором с помощью данных маршрута указывается идентификатор для поиска.The function is triggered by an HTTP request that uses route data to specify the ID to look up. Этот идентификатор используется для получения ToDoItem документа из указанной базы данных и коллекции.That ID is used to retrieve a ToDoItem document from the specified database and collection.

В примере показано, как использовать выражение привязки в параметре SqlQuery.The example shows how to use a binding expression in the SqlQuery parameter. Вы можете передать данные маршрута в параметр SqlQuery, как показано здесь, но сейчас невозможно передать значения строки запроса.You can pass route data to the SqlQuery parameter as shown, but currently you can't pass query string values.

Примечание

Если необходимо выполнить запрос только по ИДЕНТИФИКАТОРу, рекомендуется использовать поиск, как в предыдущих примерах, так как он будет потреблять меньше единиц запросов.If you need to query by just the ID, it is recommended to use a look up, like the previous examples, as it will consume less request units. Операции чтения точки (GET) более эффективны , чем запросы по идентификатору.Point read operations (GET) are more efficient than queries by ID.

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;

namespace CosmosDBSamplesV2
{
    public static class DocByIdFromRouteDataUsingSqlQuery
    {
        [FunctionName("DocByIdFromRouteDataUsingSqlQuery")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post",
                Route = "todoitems2/{id}")]HttpRequest req,
            [CosmosDB("ToDoItems", "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                SqlQuery = "select * from ToDoItems r where r.id = {id}")]
                IEnumerable<ToDoItem> toDoItems,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            foreach (ToDoItem toDoItem in toDoItems)
            {
                log.LogInformation(toDoItem.Description);
            }
            return new OkResult();
        }
    }
}

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, получение нескольких документов, используется SqlQuery (C#)HTTP trigger, get multiple docs, using SqlQuery (C#)

В следующем примере показана функция C#, которая получает список документов.The following example shows a C# function that retrieves a list of documents. Функция активируется с помощью HTTP-запроса.The function is triggered by an HTTP request. Запрос указывается в свойстве атрибута SqlQuery.The query is specified in the SqlQuery attribute property.

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;

namespace CosmosDBSamplesV2
{
    public static class DocsBySqlQuery
    {
        [FunctionName("DocsBySqlQuery")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
                HttpRequest req,
            [CosmosDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                SqlQuery = "SELECT top 2 * FROM c order by c._ts desc")]
                IEnumerable<ToDoItem> toDoItems,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            foreach (ToDoItem toDoItem in toDoItems)
            {
                log.LogInformation(toDoItem.Description);
            }
            return new OkResult();
        }
    }
}

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, получение нескольких документов, используется DocumentClient (C#)HTTP trigger, get multiple docs, using DocumentClient (C#)

В следующем примере показана функция C#, которая получает список документов.The following example shows a C# function that retrieves a list of documents. Функция активируется с помощью HTTP-запроса.The function is triggered by an HTTP request. Код использует экземпляр DocumentClient, предоставленный привязкой Azure Cosmos DB для считывания списка документов.The code uses a DocumentClient instance provided by the Azure Cosmos DB binding to read a list of documents. Экземпляр DocumentClient может также использоваться для операций записи.The DocumentClient instance could also be used for write operations.

Примечание

Для упрощения тестирования можно также использовать интерфейс IDocumentClient .You can also use the IDocumentClient interface to make testing easier.

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using System;
using System.Linq;
using System.Threading.Tasks;

namespace CosmosDBSamplesV2
{
    public static class DocsByUsingDocumentClient
    {
        [FunctionName("DocsByUsingDocumentClient")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post",
                Route = null)]HttpRequest req,
            [CosmosDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")] DocumentClient client,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            var searchterm = req.Query["searchterm"];
            if (string.IsNullOrWhiteSpace(searchterm))
            {
                return (ActionResult)new NotFoundResult();
            }

            Uri collectionUri = UriFactory.CreateDocumentCollectionUri("ToDoItems", "Items");

            log.LogInformation($"Searching for: {searchterm}");

            IDocumentQuery<ToDoItem> query = client.CreateDocumentQuery<ToDoItem>(collectionUri)
                .Where(p => p.Description.Contains(searchterm))
                .AsDocumentQuery();

            while (query.HasMoreResults)
            {
                foreach (ToDoItem result in await query.ExecuteNextAsync())
                {
                    log.LogInformation(result.Description);
                }
            }
            return new OkResult();
        }
    }
}

Пропустить примеры входных данныхSkip input examples

Примеры входных данных скрипта C#Input - C# script examples

В этом разделе содержатся следующие примеры:This section contains the following examples:

В примерах триггера HTTP используется ToDoItem простого типа:The HTTP trigger examples refer to a simple ToDoItem type:

namespace CosmosDBSamplesV2
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

Пропустить примеры входных данныхSkip input examples

Триггер очереди, поисковый идентификатор из строки (скрипт C#)Queue trigger, look up ID from string (C# script)

В следующем примере показаны входная привязка Cosmos DB в файле function.json и функция сценария C#, которая использует эту привязку.The following example shows a Cosmos DB input binding in a function.json file and a C# script function that uses the binding. Функция считывает один документ и обновляет текстовое значение в документе.The function reads a single document and updates the document's text value.

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "name": "inputDocument",
    "type": "cosmosDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "id" : "{queueTrigger}",
    "partitionKey": "{partition key value}",
    "connectionStringSetting": "MyAccount_COSMOSDB",
    "direction": "in"
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже приведен код скрипта C#.Here's the C# script code:

    using System;

    // Change input document contents using Azure Cosmos DB input binding
    public static void Run(string myQueueItem, dynamic inputDocument)
    {
      inputDocument.text = "This has changed.";
    }

Пропустить примеры входных данныхSkip input examples

Триггер очереди, получение нескольких документов, используется SqlQuery (скрипт C#)Queue trigger, get multiple docs, using SqlQuery (C# script)

В следующем примере показана входная привязка Azure Cosmos DB в файле function.json и функция сценария C#, которая использует эту привязку.The following example shows an Azure Cosmos DB input binding in a function.json file and a C# script function that uses the binding. Функция извлекает несколько документов, указанных SQL-запросом, используя триггер очереди для настройки параметров запроса.The function retrieves multiple documents specified by a SQL query, using a queue trigger to customize the query parameters.

Триггер очереди предоставляет параметр departmentId.The queue trigger provides a parameter departmentId. Сообщение из очереди { "departmentId" : "Finance" } возвратит все записи для финансового отдела.A queue message of { "departmentId" : "Finance" } would return all records for the finance department.

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "name": "documents",
    "type": "cosmosDB",
    "direction": "in",
    "databaseName": "MyDb",
    "collectionName": "MyCollection",
    "sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
    "connectionStringSetting": "CosmosDBConnection"
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже приведен код скрипта C#.Here's the C# script code:

    public static void Run(QueuePayload myQueueItem, IEnumerable<dynamic> documents)
    {
        foreach (var doc in documents)
        {
            // operate on each document
        }
    }

    public class QueuePayload
    {
        public string departmentId { get; set; }
    }

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, поисковый идентификатор из строки запроса (скрипт C#)HTTP trigger, look up ID from query string (C# script)

В следующем примере показана функция скрипта C#, которая получает один документ.The following example shows a C# script function that retrieves a single document. Функция активируется HTTP-запросом, который использует строку запроса для указания идентификатора и значения ключа секции для поиска.The function is triggered by an HTTP request that uses a query string to specify the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения ToDoItem документа из указанной базы данных и коллекции.That ID and partition key value are used to retrieve a ToDoItem document from the specified database and collection.

Ниже показан файл function.json.Here's the function.json file:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "toDoItem",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "in",
      "Id": "{Query.id}",
      "PartitionKey" : "{Query.partitionKeyValue}"
    }
  ],
  "disabled": false
}

Ниже приведен код скрипта C#.Here's the C# script code:

using System.Net;
using Microsoft.Extensions.Logging;

public static HttpResponseMessage Run(HttpRequestMessage req, ToDoItem toDoItem, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    if (toDoItem == null)
    {
         log.LogInformation($"ToDo item not found");
    }
    else
    {
        log.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, поисковый идентификатор из данных маршрута (скрипт C#)HTTP trigger, look up ID from route data (C# script)

В следующем примере показана функция скрипта C#, которая получает один документ.The following example shows a C# script function that retrieves a single document. Функция активируется HTTP-запросом, который использует данные маршрута для указания идентификатора и значения ключа секции для поиска.The function is triggered by an HTTP request that uses route data to specify the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения ToDoItem документа из указанной базы данных и коллекции.That ID and partition key value are used to retrieve a ToDoItem document from the specified database and collection.

Ниже показан файл function.json.Here's the function.json file:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ],
      "route":"todoitems/{partitionKeyValue}/{id}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "toDoItem",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "in",
      "Id": "{id}",
      "PartitionKey": "{partitionKeyValue}"
    }
  ],
  "disabled": false
}

Ниже приведен код скрипта C#.Here's the C# script code:

using System.Net;
using Microsoft.Extensions.Logging;

public static HttpResponseMessage Run(HttpRequestMessage req, ToDoItem toDoItem, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    if (toDoItem == null)
    {
         log.LogInformation($"ToDo item not found");
    }
    else
    {
        log.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, получение нескольких документов, используется SqlQuery (скрипт C#)HTTP trigger, get multiple docs, using SqlQuery (C# script)

В следующем примере показана функция скрипта C#, которая получает список документов.The following example shows a C# script function that retrieves a list of documents. Функция активируется с помощью HTTP-запроса.The function is triggered by an HTTP request. Запрос указывается в свойстве атрибута SqlQuery.The query is specified in the SqlQuery attribute property.

Ниже показан файл function.json.Here's the function.json file:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "toDoItems",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "in",
      "sqlQuery": "SELECT top 2 * FROM c order by c._ts desc"
    }
  ],
  "disabled": false
}

Ниже приведен код скрипта C#.Here's the C# script code:

using System.Net;
using Microsoft.Extensions.Logging;

public static HttpResponseMessage Run(HttpRequestMessage req, IEnumerable<ToDoItem> toDoItems, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    foreach (ToDoItem toDoItem in toDoItems)
    {
        log.LogInformation(toDoItem.Description);
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, получение нескольких документов, используется DocumentClient (скрипт C#)HTTP trigger, get multiple docs, using DocumentClient (C# script)

В следующем примере показана функция скрипта C#, которая получает список документов.The following example shows a C# script function that retrieves a list of documents. Функция активируется с помощью HTTP-запроса.The function is triggered by an HTTP request. Код использует экземпляр DocumentClient, предоставленный привязкой Azure Cosmos DB для считывания списка документов.The code uses a DocumentClient instance provided by the Azure Cosmos DB binding to read a list of documents. Экземпляр DocumentClient может также использоваться для операций записи.The DocumentClient instance could also be used for write operations.

Ниже показан файл function.json.Here's the function.json file:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "client",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "inout"
    }
  ],
  "disabled": false
}

Ниже приведен код скрипта C#.Here's the C# script code:

#r "Microsoft.Azure.Documents.Client"

using System.Net;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using Microsoft.Extensions.Logging;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, DocumentClient client, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    Uri collectionUri = UriFactory.CreateDocumentCollectionUri("ToDoItems", "Items");
    string searchterm = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "searchterm", true) == 0)
        .Value;

    if (searchterm == null)
    {
        return req.CreateResponse(HttpStatusCode.NotFound);
    }

    log.LogInformation($"Searching for word: {searchterm} using Uri: {collectionUri.ToString()}");
    IDocumentQuery<ToDoItem> query = client.CreateDocumentQuery<ToDoItem>(collectionUri)
        .Where(p => p.Description.Contains(searchterm))
        .AsDocumentQuery();

    while (query.HasMoreResults)
    {
        foreach (ToDoItem result in await query.ExecuteNextAsync())
        {
            log.LogInformation(result.Description);
        }
    }
    return req.CreateResponse(HttpStatusCode.OK);
}

Пропустить примеры входных данныхSkip input examples

Примеры входных данных JavaScriptInput - JavaScript examples

В этом разделе содержатся следующие примеры, в которых один документ считывается при указании значения идентификатора из разных источников:This section contains the following examples that read a single document by specifying an ID value from various sources:

Пропустить примеры входных данныхSkip input examples

Триггер очереди, поисковый идентификатор из JSON (JavaScript)Queue trigger, look up ID from JSON (JavaScript)

В следующем примере показана входная привязка Cosmos DB в файле function.json и функция JavaScript, которая использует привязку.The following example shows a Cosmos DB input binding in a function.json file and a JavaScript function that uses the binding. Функция считывает один документ и обновляет текстовое значение в документе.The function reads a single document and updates the document's text value.

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "name": "inputDocumentIn",
    "type": "cosmosDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "id" : "{queueTrigger_payload_property}",
    "partitionKey": "{queueTrigger_payload_property}",
    "connectionStringSetting": "MyAccount_COSMOSDB",
    "direction": "in"
},
{
    "name": "inputDocumentOut",
    "type": "cosmosDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "createIfNotExists": false,
    "partitionKey": "{queueTrigger_payload_property}",
    "connectionStringSetting": "MyAccount_COSMOSDB",
    "direction": "out"
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже показан код JavaScript.Here's the JavaScript code:

    // Change input document contents using Azure Cosmos DB input binding, using context.bindings.inputDocumentOut
    module.exports = function (context) {
    context.bindings.inputDocumentOut = context.bindings.inputDocumentIn;
    context.bindings.inputDocumentOut.text = "This was updated!";
    context.done();
    };

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, поисковый идентификатор из строки запроса (JavaScript)HTTP trigger, look up ID from query string (JavaScript)

В следующем примере показана функция JavaScript, которая получает один документ.The following example shows a JavaScript function that retrieves a single document. Функция активируется HTTP-запросом, который использует строку запроса для указания идентификатора и значения ключа секции для поиска.The function is triggered by an HTTP request that uses a query string to specify the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения ToDoItem документа из указанной базы данных и коллекции.That ID and partition key value are used to retrieve a ToDoItem document from the specified database and collection.

Ниже показан файл function.json.Here's the function.json file:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "toDoItem",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "in",
      "Id": "{Query.id}",
      "PartitionKey": "{Query.partitionKeyValue}"
    }
  ],
  "disabled": false
}

Ниже показан код JavaScript.Here's the JavaScript code:

module.exports = function (context, req, toDoItem) {
    context.log('JavaScript queue trigger function processed work item');
    if (!toDoItem)
    {
        context.log("ToDo item not found");
    }
    else
    {
        context.log("Found ToDo item, Description=" + toDoItem.Description);
    }

    context.done();
};

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, поисковый идентификатор из данных маршрута (JavaScript)HTTP trigger, look up ID from route data (JavaScript)

В следующем примере показана функция JavaScript, которая получает один документ.The following example shows a JavaScript function that retrieves a single document. Функция активируется HTTP-запросом, который использует строку запроса для указания идентификатора и значения ключа секции для поиска.The function is triggered by an HTTP request that uses a query string to specify the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения ToDoItem документа из указанной базы данных и коллекции.That ID and partition key value are used to retrieve a ToDoItem document from the specified database and collection.

Ниже показан файл function.json.Here's the function.json file:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ],
      "route":"todoitems/{partitionKeyValue}/{id}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "toDoItem",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connection": "CosmosDBConnection",
      "direction": "in",
      "Id": "{id}",
      "PartitionKey": "{partitionKeyValue}"
    }
  ],
  "disabled": false
}

Ниже показан код JavaScript.Here's the JavaScript code:

module.exports = function (context, req, toDoItem) {
    context.log('JavaScript queue trigger function processed work item');
    if (!toDoItem)
    {
        context.log("ToDo item not found");
    }
    else
    {
        context.log("Found ToDo item, Description=" + toDoItem.Description);
    }

    context.done();
};

Пропустить примеры входных данныхSkip input examples

Триггер очереди, получение нескольких документов, используется SqlQuery (JavaScript)Queue trigger, get multiple docs, using SqlQuery (JavaScript)

В следующем примере показана входная привязка Azure Cosmos DB в файле function.json и функция JavaScript, которая использует привязку.The following example shows an Azure Cosmos DB input binding in a function.json file and a JavaScript function that uses the binding. Функция извлекает несколько документов, указанных SQL-запросом, используя триггер очереди для настройки параметров запроса.The function retrieves multiple documents specified by a SQL query, using a queue trigger to customize the query parameters.

Триггер очереди предоставляет параметр departmentId.The queue trigger provides a parameter departmentId. Сообщение из очереди { "departmentId" : "Finance" } возвратит все записи для финансового отдела.A queue message of { "departmentId" : "Finance" } would return all records for the finance department.

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "name": "documents",
    "type": "cosmosDB",
    "direction": "in",
    "databaseName": "MyDb",
    "collectionName": "MyCollection",
    "sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
    "connectionStringSetting": "CosmosDBConnection"
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже показан код JavaScript.Here's the JavaScript code:

    module.exports = function (context, input) {
        var documents = context.bindings.documents;
        for (var i = 0; i < documents.length; i++) {
            var document = documents[i];
            // operate on each document
        }
        context.done();
    };

Пропустить примеры входных данныхSkip input examples

Примеры Python: входные данныеInput - Python examples

В этом разделе содержатся следующие примеры, в которых один документ считывается при указании значения идентификатора из разных источников:This section contains the following examples that read a single document by specifying an ID value from various sources:

Пропустить примеры входных данныхSkip input examples

Триггер очереди, поисковый идентификатор из JSON (Python)Queue trigger, look up ID from JSON (Python)

В следующем примере показаны привязка Cosmos DB в файле function.json и функция Python, которая использует эту привязку.The following example shows a Cosmos DB input binding in a function.json file and a Python function that uses the binding. Функция считывает один документ и обновляет текстовое значение в документе.The function reads a single document and updates the document's text value.

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "name": "documents",
    "type": "cosmosDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "id" : "{queueTrigger_payload_property}",
    "partitionKey": "{queueTrigger_payload_property}",
    "connectionStringSetting": "MyAccount_COSMOSDB",
    "direction": "in"
},
{
    "name": "$return",
    "type": "cosmosDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "createIfNotExists": false,
    "partitionKey": "{queueTrigger_payload_property}",
    "connectionStringSetting": "MyAccount_COSMOSDB",
    "direction": "out"
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже приведен код Python.Here's the Python code:

import azure.functions as func


def main(queuemsg: func.QueueMessage, documents: func.DocumentList) -> func.Document:
    if documents:
        document = documents[0]
        document['text'] = 'This was updated!'
        return document

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, поисковый идентификатор из строки запроса (Python)HTTP trigger, look up ID from query string (Python)

В следующем примере показана функция Python, которая получает один документ.The following example shows a Python function that retrieves a single document. Функция активируется HTTP-запросом, который использует строку запроса для указания идентификатора и значения ключа секции для поиска.The function is triggered by an HTTP request that uses a query string to specify the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения ToDoItem документа из указанной базы данных и коллекции.That ID and partition key value are used to retrieve a ToDoItem document from the specified database and collection.

Ниже показан файл function.json.Here's the function.json file:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "todoitems",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "in",
      "Id": "{Query.id}",
      "PartitionKey": "{Query.partitionKeyValue}"
    }
  ],
  "disabled": true,
  "scriptFile": "__init__.py"
}

Ниже приведен код Python.Here's the Python code:

import logging
import azure.functions as func


def main(req: func.HttpRequest, todoitems: func.DocumentList) -> str:
    if not todoitems:
        logging.warning("ToDo item not found")
    else:
        logging.info("Found ToDo item, Description=%s",
                     todoitems[0]['description'])

    return 'OK'

Пропустить примеры входных данныхSkip input examples

Триггер HTTP, поисковый идентификатор из данных маршрута (Python)HTTP trigger, look up ID from route data (Python)

В следующем примере показана функция Python, которая получает один документ.The following example shows a Python function that retrieves a single document. Функция активируется HTTP-запросом, который использует строку запроса для указания идентификатора и значения ключа секции для поиска.The function is triggered by an HTTP request that uses a query string to specify the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения ToDoItem документа из указанной базы данных и коллекции.That ID and partition key value are used to retrieve a ToDoItem document from the specified database and collection.

Ниже показан файл function.json.Here's the function.json file:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ],
      "route":"todoitems/{partitionKeyValue}/{id}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "cosmosDB",
      "name": "todoitems",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connection": "CosmosDBConnection",
      "direction": "in",
      "Id": "{id}",
      "PartitionKey": "{partitionKeyValue}"
    }
  ],
  "disabled": false,
  "scriptFile": "__init__.py"
}

Ниже приведен код Python.Here's the Python code:

import logging
import azure.functions as func


def main(req: func.HttpRequest, todoitems: func.DocumentList) -> str:
    if not todoitems:
        logging.warning("ToDo item not found")
    else:
        logging.info("Found ToDo item, Description=%s",
                     todoitems[0]['description'])
    return 'OK'

Пропустить примеры входных данныхSkip input examples

Триггер очереди, получение нескольких документов, использование SqlQuery (Python)Queue trigger, get multiple docs, using SqlQuery (Python)

В следующем примере показана входная привязка Azure Cosmos DB в файле function.json и функция Python, которая использует эту привязку.The following example shows an Azure Cosmos DB input binding in a function.json file and a Python function that uses the binding. Функция извлекает несколько документов, указанных SQL-запросом, используя триггер очереди для настройки параметров запроса.The function retrieves multiple documents specified by a SQL query, using a queue trigger to customize the query parameters.

Триггер очереди предоставляет параметр departmentId.The queue trigger provides a parameter departmentId. Сообщение из очереди { "departmentId" : "Finance" } возвратит все записи для финансового отдела.A queue message of { "departmentId" : "Finance" } would return all records for the finance department.

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "name": "documents",
    "type": "cosmosDB",
    "direction": "in",
    "databaseName": "MyDb",
    "collectionName": "MyCollection",
    "sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
    "connectionStringSetting": "CosmosDBConnection"
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже приведен код Python.Here's the Python code:

import azure.functions as func

def main(queuemsg: func.QueueMessage, documents: func.DocumentList):
    for document in documents:
        # operate on each document

Пропустить примеры входных данныхSkip input examples

Примеры входных данных F#Input - F# examples

В следующем примере показаны привязка Cosmos DB в файле function.json и функция F#, которая использует эту привязку.The following example shows a Cosmos DB input binding in a function.json file and a F# function that uses the binding. Функция считывает один документ и обновляет текстовое значение в документе.The function reads a single document and updates the document's text value.

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "name": "inputDocument",
    "type": "cosmosDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "id" : "{queueTrigger}",
    "connectionStringSetting": "MyAccount_COSMOSDB",
    "direction": "in"
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже показан код F#.Here's the F# code:

    (* Change input document contents using Azure Cosmos DB input binding *)
    open FSharp.Interop.Dynamic
    let Run(myQueueItem: string, inputDocument: obj) =
    inputDocument?text <- "This has changed."

Для этого примера нужен файл project.json, указывающий зависимости NuGet FSharp.Interop.Dynamic и Dynamitey:This example requires a project.json file that specifies the FSharp.Interop.Dynamic and Dynamitey NuGet dependencies:

{
    "frameworks": {
        "net46": {
            "dependencies": {
                "Dynamitey": "1.0.2",
                "FSharp.Interop.Dynamic": "3.0.0"
            }
        }
    }
}

Чтобы добавить файл project.json, см. раздел об управлении пакетом F#.To add a project.json file, see F# package management.

Примеры входных данных JavaInput - Java examples

В этом разделе содержатся следующие примеры:This section contains the following examples:

В примерах используется ToDoItem простого типа:The examples refer to a simple ToDoItem type:

public class ToDoItem {

  private String id;
  private String description;

  public String getId() {
    return id;
  }

  public String getDescription() {
    return description;
  }

  @Override
  public String toString() {
    return "ToDoItem={id=" + id + ",description=" + description + "}";
  }
}

Триггер HTTP, поисковый идентификатор из строки запроса — строковый параметр (Java)HTTP trigger, look up ID from query string - String parameter (Java)

В следующем примере показана функция Java, которая получает один документ.The following example shows a Java function that retrieves a single document. Функция активируется HTTP-запросом, который использует строку запроса для указания идентификатора и значения ключа секции для поиска.The function is triggered by a HTTP request that uses a query string to specify the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения документа из указанной базы данных и коллекции в виде строки.That ID and partition key value are used to retrieve a document from the specified database and collection, in String form.

public class DocByIdFromQueryString {

    @FunctionName("DocByIdFromQueryString")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req",
              methods = {HttpMethod.GET, HttpMethod.POST},
              authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<Optional<String>> request,
            @CosmosDBInput(name = "database",
              databaseName = "ToDoList",
              collectionName = "Items",
              id = "{Query.id}",
              partitionKey = "{Query.partitionKeyValue}",
              connectionStringSetting = "Cosmos_DB_Connection_String")
            Optional<String> item,
            final ExecutionContext context) {

        // Item list
        context.getLogger().info("Parameters are: " + request.getQueryParameters());
        context.getLogger().info("String from the database is " + (item.isPresent() ? item.get() : null));

        // Convert and display
        if (!item.isPresent()) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
                          .body("Document not found.")
                          .build();
        }
        else {
            // return JSON from Cosmos. Alternatively, we can parse the JSON string
            // and return an enriched JSON object.
            return request.createResponseBuilder(HttpStatus.OK)
                          .header("Content-Type", "application/json")
                          .body(item.get())
                          .build();
        }
    }
}

В библиотеке среды выполнения функций Java используйте заметку @CosmosDBInput для параметров функции, значения которых будут поступать из Cosmos DB.In the Java functions runtime library, use the @CosmosDBInput annotation on function parameters whose value would come from Cosmos DB. Эту аннотацию можно использовать с собственными типами Java, POJO или значениями, допускающими значение null, с помощью необязательного<T >.This annotation can be used with native Java types, POJOs, or nullable values using Optional<T>.

Триггер HTTP, поисковый идентификатор из строки запроса — параметр POJO (Java)HTTP trigger, look up ID from query string - POJO parameter (Java)

В следующем примере показана функция Java, которая получает один документ.The following example shows a Java function that retrieves a single document. Функция активируется HTTP-запросом, который использует строку запроса для указания идентификатора и значения ключа секции для поиска.The function is triggered by a HTTP request that uses a query string to specify the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения документа из указанной базы данных и коллекции.That ID and partition key value used to retrieve a document from the specified database and collection. Затем документ преобразуется в ранее созданный экземпляр POJO ToDoItem и передается функции в качестве аргумента.The document is then converted to an instance of the ToDoItem POJO previously created, and passed as an argument to the function.

public class DocByIdFromQueryStringPojo {

    @FunctionName("DocByIdFromQueryStringPojo")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req",
              methods = {HttpMethod.GET, HttpMethod.POST},
              authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<Optional<String>> request,
            @CosmosDBInput(name = "database",
              databaseName = "ToDoList",
              collectionName = "Items",
              id = "{Query.id}",
              partitionKey = "{Query.partitionKeyValue}",
              connectionStringSetting = "Cosmos_DB_Connection_String")
            ToDoItem item,
            final ExecutionContext context) {

        // Item list
        context.getLogger().info("Parameters are: " + request.getQueryParameters());
        context.getLogger().info("Item from the database is " + item);

        // Convert and display
        if (item == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
                          .body("Document not found.")
                          .build();
        }
        else {
            return request.createResponseBuilder(HttpStatus.OK)
                          .header("Content-Type", "application/json")
                          .body(item)
                          .build();
        }
    }
}

Триггер HTTP, поисковый идентификатор из данных маршрута (Java)HTTP trigger, look up ID from route data (Java)

В следующем примере показана функция Java, которая получает один документ.The following example shows a Java function that retrieves a single document. Функция активируется HTTP-запросом, который использует параметр Route для указания идентификатора и значения ключа секции для поиска.The function is triggered by a HTTP request that uses a route parameter to specify the ID and partition key value to look up. Этот идентификатор и значение ключа секции используются для получения документа из указанной базы данных и коллекции, возвращая его в виде Optional<String>.That ID and partition key value are used to retrieve a document from the specified database and collection, returning it as an Optional<String>.

public class DocByIdFromRoute {

    @FunctionName("DocByIdFromRoute")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req",
              methods = {HttpMethod.GET, HttpMethod.POST},
              authLevel = AuthorizationLevel.ANONYMOUS,
              route = "todoitems/{partitionKeyValue}/{id}")
            HttpRequestMessage<Optional<String>> request,
            @CosmosDBInput(name = "database",
              databaseName = "ToDoList",
              collectionName = "Items",
              id = "{id}",
              partitionKey = "{partitionKeyValue}",
              connectionStringSetting = "Cosmos_DB_Connection_String")
            Optional<String> item,
            final ExecutionContext context) {

        // Item list
        context.getLogger().info("Parameters are: " + request.getQueryParameters());
        context.getLogger().info("String from the database is " + (item.isPresent() ? item.get() : null));

        // Convert and display
        if (!item.isPresent()) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
                          .body("Document not found.")
                          .build();
        }
        else {
            // return JSON from Cosmos. Alternatively, we can parse the JSON string
            // and return an enriched JSON object.
            return request.createResponseBuilder(HttpStatus.OK)
                          .header("Content-Type", "application/json")
                          .body(item.get())
                          .build();
        }
    }
}

Триггер HTTP, поисковый идентификатор из данных маршрута, используется SqlQuery (Java)HTTP trigger, look up ID from route data, using SqlQuery (Java)

В следующем примере показана функция Java, которая получает один документ.The following example shows a Java function that retrieves a single document. Функция инициируется HTTP-запросом, в параметре маршрута которого указан идентификатор для поиска.The function is triggered by a HTTP request that uses a route parameter to specify the ID to look up. Этот идентификатор используется для получения документа из указанной базы данных и коллекции. При этом результирующий набор преобразуется в ToDoItem[], так как может быть возвращено несколько документов в зависимости от критериев запроса.That ID is used to retrieve a document from the specified database and collection, converting the result set to a ToDoItem[], since many documents may be returned, depending on the query criteria.

Примечание

Если необходимо выполнить запрос только по ИДЕНТИФИКАТОРу, рекомендуется использовать поиск, как в предыдущих примерах, так как он будет потреблять меньше единиц запросов.If you need to query by just the ID, it is recommended to use a look up, like the previous examples, as it will consume less request units. Операции чтения точки (GET) более эффективны , чем запросы по идентификатору.Point read operations (GET) are more efficient than queries by ID.

public class DocByIdFromRouteSqlQuery {

    @FunctionName("DocByIdFromRouteSqlQuery")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req",
              methods = {HttpMethod.GET, HttpMethod.POST},
              authLevel = AuthorizationLevel.ANONYMOUS,
              route = "todoitems2/{id}")
            HttpRequestMessage<Optional<String>> request,
            @CosmosDBInput(name = "database",
              databaseName = "ToDoList",
              collectionName = "Items",
              sqlQuery = "select * from Items r where r.id = {id}",
              connectionStringSetting = "Cosmos_DB_Connection_String")
            ToDoItem[] item,
            final ExecutionContext context) {

        // Item list
        context.getLogger().info("Parameters are: " + request.getQueryParameters());
        context.getLogger().info("Items from the database are " + item);

        // Convert and display
        if (item == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
                          .body("Document not found.")
                          .build();
        }
        else {
            return request.createResponseBuilder(HttpStatus.OK)
                          .header("Content-Type", "application/json")
                          .body(item)
                          .build();
        }
    }
}

Триггер HTTP, получение нескольких документов из данных маршрута, используется SqlQuery (Java)HTTP trigger, get multiple docs from route data, using SqlQuery (Java)

В следующем примере показана функция Java, которая получает несколько документов.The following example shows a Java function that multiple documents. Функция инициируется HTTP-запросом, в параметре маршрута desc которого указана строка для поиска в поле description.The function is triggered by a HTTP request that uses a route parameter desc to specify the string to search for in the description field. Поисковый запрос используется для получения коллекции документов из указанной базы данных и коллекции. При этом результирующий набор преобразуется в ToDoItem[] и передается функции в качестве аргумента.The search term is used to retrieve a collection of documents from the specified database and collection, converting the result set to a ToDoItem[] and passing it as an argument to the function.

public class DocsFromRouteSqlQuery {

    @FunctionName("DocsFromRouteSqlQuery")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req",
              methods = {HttpMethod.GET},
              authLevel = AuthorizationLevel.ANONYMOUS,
              route = "todoitems3/{desc}")
            HttpRequestMessage<Optional<String>> request,
            @CosmosDBInput(name = "database",
              databaseName = "ToDoList",
              collectionName = "Items",
              sqlQuery = "select * from Items r where contains(r.description, {desc})",
              connectionStringSetting = "Cosmos_DB_Connection_String")
            ToDoItem[] items,
            final ExecutionContext context) {

        // Item list
        context.getLogger().info("Parameters are: " + request.getQueryParameters());
        context.getLogger().info("Number of items from the database is " + (items == null ? 0 : items.length));

        // Convert and display
        if (items == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
                          .body("No documents found.")
                          .build();
        }
        else {
            return request.createResponseBuilder(HttpStatus.OK)
                          .header("Content-Type", "application/json")
                          .body(items)
                          .build();
        }
    }
}

Входные атрибутыInput - attributes

В библиотеках классов C# используйте атрибут CosmosDB.In C# class libraries, use the CosmosDB attribute.

Конструктор атрибута принимает имя базы данных и имя коллекции.The attribute's constructor takes the database name and collection name. Дополнительные сведения о параметрах и других свойствах, которые можно настроить, см. в следующем разделе о настройке.For information about those settings and other properties that you can configure, see the following configuration section.

Входная конфигурацияInput - configuration

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json и атрибуте CosmosDB.The following table explains the binding configuration properties that you set in the function.json file and the CosmosDB attribute.

свойство function.jsonfunction.json property Свойство атрибутаAttribute property ОПИСАНИЕDescription
typetype Нужно задать значение cosmosDB.Must be set to cosmosDB.
directiondirection Нужно задать значение in.Must be set to in.
namename Имя параметра привязки, представляющего документ в функции.Name of the binding parameter that represents the document in the function.
databaseNamedatabaseName DatabaseNameDatabaseName База данных, содержащая документ.The database containing the document.
collectionNamecollectionName CollectionNameCollectionName Имя коллекции, содержащей документ.The name of the collection that contains the document.
idid IdId Идентификатор документа, который нужно получить.The ID of the document to retrieve. Это свойство поддерживает выражения привязок.This property supports binding expressions. Не задавайте свойства id или sqlQuery одновременно.Don't set both the id and sqlQuery properties. Если не задать ни одного из них, извлекается вся коллекция.If you don't set either one, the entire collection is retrieved.
sqlQuerysqlQuery SqlQuerySqlQuery SQL-запрос к Azure Cosmos DB, используемый для извлечения нескольких документов.An Azure Cosmos DB SQL query used for retrieving multiple documents. Свойство поддерживает привязки времени выполнения, как показано в примере: SELECT * FROM c where c.departmentId = {departmentId}.The property supports runtime bindings, as in this example: SELECT * FROM c where c.departmentId = {departmentId}. Не задавайте свойства id или sqlQuery одновременно.Don't set both the id and sqlQuery properties. Если не задать ни одного из них, извлекается вся коллекция.If you don't set either one, the entire collection is retrieved.
connectionStringSettingconnectionStringSetting ConnectionStringSettingConnectionStringSetting Имя параметра приложения, содержащего строку подключения к Azure Cosmos DB.The name of the app setting containing your Azure Cosmos DB connection string.
partitionKeypartitionKey PartitionKeyPartitionKey Задает значение ключа секции для поиска.Specifies the partition key value for the lookup. Может включать параметры привязки.May include binding parameters. Он необходим для уточняющих запросов в секционированных коллекциях.It is required for lookups in partitioned collections.

При локальной разработке параметры приложения перейдут в файл local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Использование входной привязкиInput - usage

В функциях C# и F# любые изменения, внесенные во входной документ посредством именованных входных параметров, сохраняются автоматически после успешного выхода из функции.In C# and F# functions, when the function exits successfully, any changes made to the input document via named input parameters are automatically persisted.

В функциях JavaScript изменения не обрабатываются автоматически при выходе из функции.In JavaScript functions, updates are not made automatically upon function exit. Для внесения изменений используйте context.bindings.<documentName>In и context.bindings.<documentName>Out.Instead, use context.bindings.<documentName>In and context.bindings.<documentName>Out to make updates. Ознакомьтесь с примером на языке JavaScript.See the JavaScript example.

Выходные данныеOutput

Выходная привязка Azure Cosmos DB позволяет записать новый документ в базу данных Azure Cosmos DB с помощью API SQL.The Azure Cosmos DB output binding lets you write a new document to an Azure Cosmos DB database using the SQL API.

Примеры выходных данныхOutput - examples

Языковой пример см. в разделах:See the language-specific examples:

См. также пример входных данных, в котором используется DocumentClient.See also the input example that uses DocumentClient.

Пропустить примеры выводаSkip output examples

Примеры выходных данных C#Output - C# examples

В этом разделе содержатся следующие примеры:This section contains the following examples:

  • Триггер очереди, запись одного документаQueue trigger, write one doc
  • Триггер очереди, запись документов при помощи IAsyncCollectorQueue trigger, write docs using IAsyncCollector

В примерах используется ToDoItem простого типа:The examples refer to a simple ToDoItem type:

namespace CosmosDBSamplesV2
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

Пропустить примеры выводаSkip output examples

Триггер очереди, запись одного документа (C#)Queue trigger, write one doc (C#)

В следующем примере показана функция C#, которая добавляет документ в базу данных, используя данные, полученные из сообщения хранилища очередей.The following example shows a C# function that adds a document to a database, using data provided in message from Queue storage.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using System;

namespace CosmosDBSamplesV2
{
    public static class WriteOneDoc
    {
        [FunctionName("WriteOneDoc")]
        public static void Run(
            [QueueTrigger("todoqueueforwrite")] string queueMessage,
            [CosmosDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")]out dynamic document,
            ILogger log)
        {
            document = new { Description = queueMessage, id = Guid.NewGuid() };

            log.LogInformation($"C# Queue trigger function inserted one row");
            log.LogInformation($"Description={queueMessage}");
        }
    }
}

Пропустить примеры выводаSkip output examples

Триггер очереди, запись документов с помощью IAsyncCollector (C#)Queue trigger, write docs using IAsyncCollector (C#)

В следующем примере показана функция C#, которая добавляет коллекцию документов в базу данных с помощью данных, полученных из JSON сообщения очереди.The following example shows a C# function that adds a collection of documents to a database, using data provided in a queue message JSON.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;

namespace CosmosDBSamplesV2
{
    public static class WriteDocsIAsyncCollector
    {
        [FunctionName("WriteDocsIAsyncCollector")]
        public static async Task Run(
            [QueueTrigger("todoqueueforwritemulti")] ToDoItem[] toDoItemsIn,
            [CosmosDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")]
                IAsyncCollector<ToDoItem> toDoItemsOut,
            ILogger log)
        {
            log.LogInformation($"C# Queue trigger function processed {toDoItemsIn?.Length} items");

            foreach (ToDoItem toDoItem in toDoItemsIn)
            {
                log.LogInformation($"Description={toDoItem.Description}");
                await toDoItemsOut.AddAsync(toDoItem);
            }
        }
    }
}

Пропустить примеры выводаSkip output examples

Примеры выходных данных скрипта C#Output - C# script examples

В этом разделе содержатся следующие примеры:This section contains the following examples:

  • Триггер очереди, запись одного документаQueue trigger, write one doc
  • Триггер очереди, запись документов при помощи IAsyncCollectorQueue trigger, write docs using IAsyncCollector

Пропустить примеры выводаSkip output examples

Триггер очереди, запись одного документа (скрипт C#)Queue trigger, write one doc (C# script)

В следующем примере показаны выходная привязка Azure Cosmos DB в файле function.json и функция сценария C#, которая использует эту привязку.The following example shows an Azure Cosmos DB output binding in a function.json file and a C# script function that uses the binding. Функция использует входную привязку очереди для очереди, которую получает JSON в следующем формате:The function uses a queue input binding for a queue that receives JSON in the following format:

{
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Функция создает документы Azure Cosmos DB для каждой записи в следующем формате:The function creates Azure Cosmos DB documents in the following format for each record:

{
    "id": "John Henry-123456",
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "name": "employeeDocument",
    "type": "cosmosDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "createIfNotExists": true,
    "connectionStringSetting": "MyAccount_COSMOSDB",
    "direction": "out"
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже приведен код скрипта C#.Here's the C# script code:

    #r "Newtonsoft.Json"

    using Microsoft.Azure.WebJobs.Host;
    using Newtonsoft.Json.Linq;
    using Microsoft.Extensions.Logging;

    public static void Run(string myQueueItem, out object employeeDocument, ILogger log)
    {
      log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");

      dynamic employee = JObject.Parse(myQueueItem);

      employeeDocument = new {
        id = employee.name + "-" + employee.employeeId,
        name = employee.name,
        employeeId = employee.employeeId,
        address = employee.address
      };
    }

Триггер очереди, запись документов при помощи IAsyncCollectorQueue trigger, write docs using IAsyncCollector

Для создания нескольких документов можно выполнить привязку к ICollector<T> или к IAsyncCollector<T>, где T — любой из поддерживаемых типов.To create multiple documents, you can bind to ICollector<T> or IAsyncCollector<T> where T is one of the supported types.

Этот пример относится к простому типу ToDoItem:This example refers to a simple ToDoItem type:

namespace CosmosDBSamplesV2
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

Ниже показан файл function.json:Here's the function.json file:

{
  "bindings": [
    {
      "name": "toDoItemsIn",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "todoqueueforwritemulti",
      "connectionStringSetting": "AzureWebJobsStorage"
    },
    {
      "type": "cosmosDB",
      "name": "toDoItemsOut",
      "databaseName": "ToDoItems",
      "collectionName": "Items",
      "connectionStringSetting": "CosmosDBConnection",
      "direction": "out"
    }
  ],
  "disabled": false
}

Ниже приведен код скрипта C#.Here's the C# script code:

using System;
using Microsoft.Extensions.Logging;

public static async Task Run(ToDoItem[] toDoItemsIn, IAsyncCollector<ToDoItem> toDoItemsOut, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed {toDoItemsIn?.Length} items");

    foreach (ToDoItem toDoItem in toDoItemsIn)
    {
        log.LogInformation($"Description={toDoItem.Description}");
        await toDoItemsOut.AddAsync(toDoItem);
    }
}

Пропустить примеры выводаSkip output examples

Примеры выходных данных JavaScriptOutput - JavaScript examples

В следующем примере показана выходная привязка Azure Cosmos DB в файле function.json и функция JavaScript, которая использует эту привязку.The following example shows an Azure Cosmos DB output binding in a function.json file and a JavaScript function that uses the binding. Функция использует входную привязку очереди для очереди, которую получает JSON в следующем формате:The function uses a queue input binding for a queue that receives JSON in the following format:

{
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Функция создает документы Azure Cosmos DB для каждой записи в следующем формате:The function creates Azure Cosmos DB documents in the following format for each record:

{
    "id": "John Henry-123456",
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "name": "employeeDocument",
    "type": "cosmosDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "createIfNotExists": true,
    "connectionStringSetting": "MyAccount_COSMOSDB",
    "direction": "out"
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже показан код JavaScript.Here's the JavaScript code:

    module.exports = function (context) {

      context.bindings.employeeDocument = JSON.stringify({
        id: context.bindings.myQueueItem.name + "-" + context.bindings.myQueueItem.employeeId,
        name: context.bindings.myQueueItem.name,
        employeeId: context.bindings.myQueueItem.employeeId,
        address: context.bindings.myQueueItem.address
      });

      context.done();
    };

Пропустить примеры выводаSkip output examples

Примеры выходных данных F#Output - F# examples

В следующем примере показаны выходная привязка Azure Cosmos DB в файле function.json и функция F#, которая использует эту привязку.The following example shows an Azure Cosmos DB output binding in a function.json file and an F# function that uses the binding. Функция использует входную привязку очереди для очереди, которую получает JSON в следующем формате:The function uses a queue input binding for a queue that receives JSON in the following format:

{
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Функция создает документы Azure Cosmos DB для каждой записи в следующем формате:The function creates Azure Cosmos DB documents in the following format for each record:

{
    "id": "John Henry-123456",
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Данные привязки в файле function.json:Here's the binding data in the function.json file:

{
    "name": "employeeDocument",
    "type": "cosmosDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "createIfNotExists": true,
    "connectionStringSetting": "MyAccount_COSMOSDB",
    "direction": "out"
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже показан код F#.Here's the F# code:

    open FSharp.Interop.Dynamic
    open Newtonsoft.Json
    open Microsoft.Extensions.Logging

    type Employee = {
      id: string
      name: string
      employeeId: string
      address: string
    }

    let Run(myQueueItem: string, employeeDocument: byref<obj>, log: ILogger) =
      log.LogInformation(sprintf "F# Queue trigger function processed: %s" myQueueItem)
      let employee = JObject.Parse(myQueueItem)
      employeeDocument <-
        { id = sprintf "%s-%s" employee?name employee?employeeId
          name = employee?name
          employeeId = employee?employeeId
          address = employee?address }

Для этого примера нужен файл project.json, указывающий зависимости NuGet FSharp.Interop.Dynamic и Dynamitey:This example requires a project.json file that specifies the FSharp.Interop.Dynamic and Dynamitey NuGet dependencies:

{
    "frameworks": {
        "net46": {
          "dependencies": {
            "Dynamitey": "1.0.2",
            "FSharp.Interop.Dynamic": "3.0.0"
           }
        }
    }
}

Чтобы добавить файл project.json, см. раздел об управлении пакетом F#.To add a project.json file, see F# package management.

Примеры выходных данных JavaOutput - Java examples

Триггер очереди, сохранение сообщения в базе данных через возвращаемое значение (Java)Queue trigger, save message to database via return value (Java)

В следующем примере показана функция Java, которая добавляет документ в базу данных, используя данные из сообщения в хранилище очередей.The following example shows a Java function that adds a document to a database with data from a message in Queue storage.

@FunctionName("getItem")
@CosmosDBOutput(name = "database",
  databaseName = "ToDoList",
  collectionName = "Items",
  connectionStringSetting = "AzureCosmosDBConnection")
public String cosmosDbQueryById(
    @QueueTrigger(name = "msg",
      queueName = "myqueue-items",
      connection = "AzureWebJobsStorage")
    String message,
    final ExecutionContext context)  {
     return "{ id: \"" + System.currentTimeMillis() + "\", Description: " + message + " }";
   }

Триггер HTTP, сохранение одного документа в базе данных через возвращаемое значение (Java)HTTP trigger, save one document to database via return value (Java)

В следующем примере показана функция Java, подпись которой помечена с помощью аннотации @CosmosDBOutput и которая возвращает значение типа String.The following example shows a Java function whose signature is annotated with @CosmosDBOutput and has return value of type String. Документ JSON, возвращаемый функцией, автоматически записывается в соответствующую коллекцию CosmosDB.The JSON document returned by the function will be automatically written to the corresponding CosmosDB collection.

    @FunctionName("WriteOneDoc")
    @CosmosDBOutput(name = "database",
      databaseName = "ToDoList",
      collectionName = "Items",
      connectionStringSetting = "Cosmos_DB_Connection_String")
    public String run(
            @HttpTrigger(name = "req",
              methods = {HttpMethod.GET, HttpMethod.POST},
              authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {

        // Item list
        context.getLogger().info("Parameters are: " + request.getQueryParameters());

        // Parse query parameter
        String query = request.getQueryParameters().get("desc");
        String name = request.getBody().orElse(query);

        // Generate random ID
        final int id = Math.abs(new Random().nextInt());

        // Generate document
        final String jsonDocument = "{\"id\":\"" + id + "\", " +
                                    "\"description\": \"" + name + "\"}";

        context.getLogger().info("Document to be saved: " + jsonDocument);

        return jsonDocument;
    }

Триггер HTTP, сохранение одного документа в базе данных через OutputBinding (Java)HTTP trigger, save one document to database via OutputBinding (Java)

В следующем примере показана функция Java, которая записывает документ в CosmosDB с помощью выходного параметра OutputBinding<T>.The following example shows a Java function that writes a document to CosmosDB via an OutputBinding<T> output parameter. Обратите внимание, что в этом случае аннотацию outputItem необходимо добавить к параметру @CosmosDBOutput, а не к подписи функции.Note that, in this setup, it is the outputItem parameter that needs to be annotated with @CosmosDBOutput, not the function signature. OutputBinding<T> позволяет использовать привязку для записи документа в CosmosDB в вашей функции, а также позволяет возвращать вызывающему объекту другое значение, например JSON или XML-документ.Using OutputBinding<T> lets your function take advantage of the binding to write the document to CosmosDB while also allowing returning a different value to the function caller, such as a JSON or XML document.

    @FunctionName("WriteOneDocOutputBinding")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req",
              methods = {HttpMethod.GET, HttpMethod.POST},
              authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<Optional<String>> request,
            @CosmosDBOutput(name = "database",
              databaseName = "ToDoList",
              collectionName = "Items",
              connectionStringSetting = "Cosmos_DB_Connection_String")
            OutputBinding<String> outputItem,
            final ExecutionContext context) {

        // Parse query parameter
        String query = request.getQueryParameters().get("desc");
        String name = request.getBody().orElse(query);

        // Item list
        context.getLogger().info("Parameters are: " + request.getQueryParameters());

        // Generate random ID
        final int id = Math.abs(new Random().nextInt());

        // Generate document
        final String jsonDocument = "{\"id\":\"" + id + "\", " +
                                    "\"description\": \"" + name + "\"}";

        context.getLogger().info("Document to be saved: " + jsonDocument);

        // Set outputItem's value to the JSON document to be saved
        outputItem.setValue(jsonDocument);

        // return a different document to the browser or calling client.
        return request.createResponseBuilder(HttpStatus.OK)
                      .body("Document created successfully.")
                      .build();
    }

Триггер HTTP, сохранение нескольких документов в базе данных через OutputBinding (Java)HTTP trigger, save multiple documents to database via OutputBinding (Java)

В следующем примере показана функция Java, которая записывает несколько документов в CosmosDB с помощью выходного параметра OutputBinding<T>.The following example shows a Java function that writes multiple documents to CosmosDB via an OutputBinding<T> output parameter. Обратите внимание, что в этом случае аннотацию outputItem необходимо добавить к параметру @CosmosDBOutput, а не к подписи функции.Note that, in this setup, it is the outputItem parameter that needs to be annotated with @CosmosDBOutput, not the function signature. Выходной параметр outputItem содержит список объектов ToDoItem в качестве типа параметра шаблона.The output parameter, outputItem has a list of ToDoItem objects as its template parameter type. OutputBinding<T> позволяет использовать привязку для записи документов в CosmosDB в вашей функции, а также позволяет возвращать вызывающему объекту другое значение, например JSON или XML-документ.Using OutputBinding<T> lets your function take advantage of the binding to write the documents to CosmosDB while also allowing returning a different value to the function caller, such as a JSON or XML document.

    @FunctionName("WriteMultipleDocsOutputBinding")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req",
              methods = {HttpMethod.GET, HttpMethod.POST},
              authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<Optional<String>> request,
            @CosmosDBOutput(name = "database",
              databaseName = "ToDoList",
              collectionName = "Items",
              connectionStringSetting = "Cosmos_DB_Connection_String")
            OutputBinding<List<ToDoItem>> outputItem,
            final ExecutionContext context) {

        // Parse query parameter
        String query = request.getQueryParameters().get("desc");
        String name = request.getBody().orElse(query);

        // Item list
        context.getLogger().info("Parameters are: " + request.getQueryParameters());

        // Generate documents
        List<ToDoItem> items = new ArrayList<>();

        for (int i = 0; i < 5; i ++) {
          // Generate random ID
          final int id = Math.abs(new Random().nextInt());

          // Create ToDoItem
          ToDoItem item = new ToDoItem(String.valueOf(id), name);

          items.add(item);
        }

        // Set outputItem's value to the list of POJOs to be saved
        outputItem.setValue(items);
        context.getLogger().info("Document to be saved: " + items);

        // return a different document to the browser or calling client.
        return request.createResponseBuilder(HttpStatus.OK)
                      .body("Documents created successfully.")
                      .build();
    }

В библиотеке среды выполнения функций Java используйте заметку @CosmosDBOutput для параметров, которые будут записываться в Cosmos DB.In the Java functions runtime library, use the @CosmosDBOutput annotation on parameters that will be written to Cosmos DB. Необходимо использовать тип параметра аннотации OutputBinding<T>, где T — собственный тип Java или POJO.The annotation parameter type should be OutputBinding<T>, where T is either a native Java type or a POJO.

Выходные данные — примеры PythonOutput - Python examples

В следующем примере показано, как записать документ в базу данных Azure CosmosDB в качестве выходных данных функции.The following example demonstrates how to write a document to an Azure CosmosDB database as the output of a function.

Определение привязки определяется в Function. JSON , где type имеет значение cosmosDB.The binding definition is defined in function.json where type is set to cosmosDB.

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "cosmosDB",
      "direction": "out",
      "name": "doc",
      "databaseName": "demodb",
      "collectionName": "data",
      "createIfNotExists": "true",
      "connectionStringSetting": "AzureCosmosDBConnectionString"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}

Для записи в базу данных передайте объект документа в метод set параметра базы данных.To write to the database, pass a document object to the set method of the database parameter.

import azure.functions as func

def main(req: func.HttpRequest, doc: func.Out[func.Document]) -> func.HttpResponse:

    request_body = req.get_body()

    doc.set(func.Document.from_json(request_body))

    return 'OK'

Выходные атрибутыOutput - attributes

В библиотеках классов C# используйте атрибут CosmosDB.In C# class libraries, use the CosmosDB attribute.

Конструктор атрибута принимает имя базы данных и имя коллекции.The attribute's constructor takes the database name and collection name. Дополнительные сведения о параметрах и других свойствах, которые можно настроить, см. в разделе Выходная конфигурация.For information about those settings and other properties that you can configure, see Output - configuration. Ниже приведен пример атрибута CosmosDB в сигнатуре метода:Here's a CosmosDB attribute example in a method signature:

    [FunctionName("QueueToDocDB")]
    public static void Run(
        [QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] string myQueueItem,
        [CosmosDB("ToDoList", "Items", Id = "id", ConnectionStringSetting = "myCosmosDB")] out dynamic document)
    {
        ...
    }

Полный пример см. в разделе "Пример выходных данных C#".For a complete example, see Output - C# example.

Выходная конфигурацияOutput - configuration

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json и атрибуте CosmosDB.The following table explains the binding configuration properties that you set in the function.json file and the CosmosDB attribute.

свойство function.jsonfunction.json property Свойство атрибутаAttribute property ОПИСАНИЕDescription
typetype Нужно задать значение cosmosDB.Must be set to cosmosDB.
directiondirection Нужно задать значение out.Must be set to out.
namename Имя параметра привязки, представляющего документ в функции.Name of the binding parameter that represents the document in the function.
databaseNamedatabaseName DatabaseNameDatabaseName База данных, содержащая коллекцию, в которой создается документ.The database containing the collection where the document is created.
collectionNamecollectionName CollectionNameCollectionName Имя коллекции, в которой создается документ.The name of the collection where the document is created.
createIfNotExistscreateIfNotExists CreateIfNotExistsCreateIfNotExists Логическое значение, указывающее, будет ли создана коллекция при ее отсутствии.A boolean value to indicate whether the collection is created when it doesn't exist. Значение по умолчанию — false, так как коллекции создаются с использованием зарезервированной пропускной способности, с которой связаны ценовые требования.The default is false because new collections are created with reserved throughput, which has cost implications. Дополнительные сведения см. на странице с расценками.For more information, see the pricing page.
partitionKeypartitionKey PartitionKeyPartitionKey Если для CreateIfNotExists задано значение true, определяется путь к ключу раздела для созданной коллекции.When CreateIfNotExists is true, defines the partition key path for the created collection.
CollectionThroughputcollectionThroughput CollectionThroughputCollectionThroughput Если для CreateIfNotExists задано значение true, определяется пропускная способность созданной коллекции.When CreateIfNotExists is true, defines the throughput of the created collection.
connectionStringSettingconnectionStringSetting ConnectionStringSettingConnectionStringSetting Имя параметра приложения, содержащего строку подключения к Azure Cosmos DB.The name of the app setting containing your Azure Cosmos DB connection string.

При локальной разработке параметры приложения перейдут в файл local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Использование выходной привязкиOutput - usage

При записи в параметре вывода функции в базе данных по умолчанию создается документ,By default, when you write to the output parameter in your function, a document is created in your database. для которого автоматически создается GUID в качестве идентификатора документа.This document has an automatically generated GUID as the document ID. Идентификатор выходного документа можно определить, указав свойство id в объекте JSON, передаваемом в параметр вывода.You can specify the document ID of the output document by specifying the id property in the JSON object passed to the output parameter.

Примечание

Если указать идентификатор существующего документа, он перезаписывается новым выходным документом.When you specify the ID of an existing document, it gets overwritten by the new output document.

Коды возврата и исключенийExceptions and return codes

ПривязкаBinding Справочные материалыReference
Cosmos DBCosmosDB Коды ошибок Cosmos DBCosmosDB Error Codes

Параметры файла host.jsonhost.json settings

В этом разделе описываются глобальные параметры конфигурации, доступные для этой привязки в версии 2.x.This section describes the global configuration settings available for this binding in version 2.x. Дополнительные сведения о глобальных параметрах конфигурации в версии 2.x см. в статье Справочник по файлу host.json для Функций Azure.For more information about global configuration settings in version 2.x, see host.json reference for Azure Functions version 2.x.

{
    "version": "2.0",
    "extensions": {
        "cosmosDB": {
            "connectionMode": "Gateway",
            "protocol": "Https",
            "leaseOptions": {
                "leasePrefix": "prefix1"
            }
        }
    }
}
СвойствоProperty значение по умолчаниюDefault ОПИСАНИЕDescription
GatewayModeGatewayMode gatewayGateway Режим подключения, используемый функцией при подключении к службе Azure Cosmos DB.The connection mode used by the function when connecting to the Azure Cosmos DB service. Возможные значения: Direct и Gateway.Options are Direct and Gateway
ПротоколProtocol HttpsHttps Протокол подключения, используемый функцией при подключении к службе Azure Cosmos DB.The connection protocol used by the function when connection to the Azure Cosmos DB service. Описание обоих режимовRead here for an explanation of both modes
leasePrefixleasePrefix Недоступноn/a Префикс аренды для использования во всех функциях приложения.Lease prefix to use across all functions in an app.

Дополнительная информацияNext steps