Udostępnij za pośrednictwem


Powiązania usługi Azure Cosmos DB dla usługi Azure Functions 1.x

W tym artykule wyjaśniono, jak pracować z powiązaniami usługi Azure Cosmos DB w usłudze Azure Functions. Usługa Azure Functions obsługuje powiązania wyzwalacza, danych wejściowych i wyjściowych dla usługi Azure Cosmos DB.

Uwaga

Ten artykuł dotyczy usługi Azure Functions 1.x. Aby uzyskać informacje na temat używania tych powiązań w usłudze Functions 2.x i nowszych, zobacz Powiązania usługi Azure Cosmos DB dla usługi Azure Functions 2.x.

To powiązanie pierwotnie nosiło nazwę DocumentDB. W usłudze Azure Functions w wersji 1.x nazwa wyzwalacza została zmieniona tylko na Azure Cosmos DB; powiązanie wejściowe, powiązanie wyjściowe i pakiet NuGet zachowują nazwę usługi DocumentDB.

Uwaga

Użycie powiązań usługi Azure Cosmos DB jest obsługiwane tylko w przypadku interfejsu API SQL. W przypadku wszystkich innych interfejsów API usługi Azure Cosmos DB należy uzyskać dostęp do bazy danych z funkcji przy użyciu klienta statycznego dla interfejsu API, w tym usługi Azure Cosmos DB dla bazy danych MongoDB, usługi Azure Cosmos DB dla apache Cassandra, usługi Azure Cosmos DB dla języka Apache Gremlin i usługi Azure Cosmos DB dla tabel.

Pakiety — Functions 1.x

Powiązania usługi Azure Cosmos DB dla usługi Functions w wersji 1.x są dostępne w pakiecie NuGet Microsoft.Azure.WebJobs.Extensions.DocumentDB w wersji 1.x. Kod źródłowy powiązań znajduje się w repozytorium GitHub azure-webjobs-sdk-extensions .

W poniższej tabeli przedstawiono sposób dodawania obsługi powiązań wyjściowych w każdym środowisku projektowym.

Środowisko projektowe Aby dodać obsługę w usłudze Functions 1.x
Programowanie lokalne: biblioteka klas języka C# Instalowanie pakietu
Programowanie lokalne: skrypt języka C#, JavaScript, F# Automatyczne
Programowanie w portalu Automatyczne

Wyzwalacz

Wyzwalacz usługi Azure Cosmos DB używa zestawienia zmian usługi Azure Cosmos DB do nasłuchiwania wstawiania i aktualizacji między partycjami. Kanał informacyjny zmian publikuje wstawki i aktualizacje, a nie usunięcia.

Wyzwalacz — przykład

W poniższym przykładzie przedstawiono funkcję języka C# w procesie wywoływaną w przypadku wstawiania lub aktualizacji w określonej bazie danych i kolekcji.

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

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

Wyzwalacz — atrybuty

W przypadku bibliotek klas języka C# w procesie użyj atrybutu CosmosDBTrigger .

Konstruktor atrybutu przyjmuje nazwę bazy danych i nazwę kolekcji. Aby uzyskać informacje o tych ustawieniach i innych właściwościach, które można skonfigurować, zobacz Wyzwalacz — konfiguracja. Oto przykład atrybutu CosmosDBTrigger w podpisie metody:

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

Pełny przykład można znaleźć w temacie Trigger — C# example (Wyzwalacz — przykład w języku C#).

Wyzwalacz — konfiguracja

W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w pliku function.json i atrybutu CosmosDBTrigger .

właściwość function.json Właściwość atrybutu opis
type nie dotyczy Musi być ustawiona wartość cosmosDBTrigger.
direction nie dotyczy Musi być ustawiona wartość in. Ten parametr jest ustawiany automatycznie podczas tworzenia wyzwalacza w witrynie Azure Portal.
name nie dotyczy Nazwa zmiennej używana w kodzie funkcji, która reprezentuje listę dokumentów ze zmianami.
connectionStringSetting ConnectionStringSetting Nazwa ustawienia aplikacji zawierającego parametry połączenia używane do nawiązywania połączenia z monitorowanego konta usługi Azure Cosmos DB.
databaseName Nazwa bazy danych Nazwa bazy danych usługi Azure Cosmos DB z monitorowaną kolekcją.
collectionName CollectionName Nazwa monitorowanej kolekcji.
leaseConnectionStringSetting LeaseConnectionStringSetting (Opcjonalnie) Nazwa ustawienia aplikacji zawierającego parametry połączenia do usługi, która przechowuje kolekcję dzierżaw. Jeśli nie zostanie ustawiona, zostanie użyta connectionStringSetting wartość. Ten parametr jest ustawiany automatycznie podczas tworzenia powiązania w portalu. Parametry połączenia dla kolekcji dzierżaw musi mieć uprawnienia do zapisu.
leaseDatabaseName LeaseDatabaseName (Opcjonalnie) Nazwa bazy danych, która zawiera kolekcję używaną do przechowywania dzierżaw. Jeśli nie zostanie ustawiona, zostanie użyta wartość databaseName ustawienia. Ten parametr jest ustawiany automatycznie podczas tworzenia powiązania w portalu.
leaseCollectionName LeaseCollectionName (Opcjonalnie) Nazwa kolekcji używanej do przechowywania dzierżaw. Jeśli nie zostanie ustawiona, zostanie użyta wartość leases .
createLeaseCollectionIfNotExists CreateLeaseCollectionIfNotExists (Opcjonalnie) Gdy jest ustawiona wartość true, kolekcja dzierżaw jest tworzona automatycznie, gdy jeszcze nie istnieje. Domyślna wartość to false.
leasesCollectionThroughput LeasesCollectionThroughput (Opcjonalnie) Definiuje liczbę jednostek żądań do przypisania podczas tworzenia kolekcji dzierżaw. To ustawienie jest używane tylko wtedy, gdy createLeaseCollectionIfNotExists jest ustawione na truewartość . Ten parametr jest ustawiany automatycznie podczas tworzenia powiązania przy użyciu portalu.
leaseCollectionPrefix LeaseCollectionPrefix (Opcjonalnie) Po ustawieniu dodaje ona prefiks do dzierżaw utworzonych w kolekcji dzierżaw dla tej funkcji, co pozwala na współużytkowanie tej samej kolekcji dzierżawy przez dwie oddzielne funkcje platformy Azure przy użyciu różnych prefiksów.
feedPollDelay FeedPollDelay (Opcjonalnie) Po ustawieniu definiuje, w milisekundach, opóźnienie między sondowaniem partycji dla nowych zmian w kanale informacyjnym, po opróżnieniu wszystkich bieżących zmian. Wartość domyślna to 5000 (5 sekund).
leaseAcquireInterval LeaseAcquireInterval (Opcjonalnie) Po ustawieniu definiuje, w milisekundach, interwał uruchamiania zadania obliczeniowego, jeśli partycje są równomiernie dystrybuowane między znane wystąpienia hosta. Wartość domyślna to 13000 (13 sekund).
leaseExpirationInterval LeaseExpirationInterval (Opcjonalnie) Po ustawieniu definiuje, w milisekundach, interwał, dla którego dzierżawa jest wykonywana w dzierżawie reprezentującej partycję. Jeśli dzierżawa nie zostanie odnowiona w tym interwale, spowoduje to wygaśnięcie, a własność partycji zostanie przeniesiona do innego wystąpienia. Wartość domyślna to 60000 (60 sekund).
leaseRenewInterval LeaseRenewInterval (Opcjonalnie) Po ustawieniu definiuje, w milisekundach, interwał odnawiania dla wszystkich dzierżaw dla partycji, które są obecnie przechowywane przez wystąpienie. Wartość domyślna to 17000 (17 sekund).
checkpointFrequency Punkt kontrolnyFrequency (Opcjonalnie) Po ustawieniu definiuje interwał między punktami kontrolnymi dzierżawy w milisekundach. Wartość domyślna jest zawsze po każdym wywołaniu funkcji.
maxItemsPerInvocation MaxItemsPerInvocation (Opcjonalnie) Po ustawieniu dostosowuje maksymalną ilość elementów odebranych na wywołanie funkcji.
startFromBeginning StartFromBeginning (Opcjonalnie) Po ustawieniu informuje wyzwalacz o rozpoczęciu odczytywania zmian od początku historii kolekcji zamiast bieżącej godziny. Działa to tylko przy pierwszym uruchomieniu wyzwalacza, tak jak w kolejnych uruchomieniach, punkty kontrolne są już przechowywane. Ustawienie tej wartości na true wartość , gdy istnieją już utworzone dzierżawy, nie ma wpływu.

Podczas tworzenia aplikacji lokalnie dodaj ustawienia aplikacji w pliku local.settings.json w kolekcji Values .

Wyzwalacz — użycie

Wyzwalacz wymaga drugiej kolekcji używanej do przechowywania dzierżaw w partycjach. Zarówno monitorowana kolekcja, jak i kolekcja zawierająca dzierżawy muszą być dostępne, aby wyzwalacz działał.

Ważne

Jeśli wiele funkcji jest skonfigurowanych do używania wyzwalacza usługi Azure Cosmos DB dla tej samej kolekcji, każda z funkcji powinna używać dedykowanej kolekcji dzierżaw lub określać inną LeaseCollectionPrefix dla każdej funkcji. W przeciwnym razie zostanie wyzwolona tylko jedna z funkcji. Aby uzyskać informacje o prefiksie, zobacz sekcję Konfiguracja.

Wyzwalacz nie wskazuje, czy dokument został zaktualizowany, czy wstawiony, tylko udostępnia sam dokument. Jeśli musisz obsługiwać aktualizacje i wstawiać inaczej, możesz to zrobić, implementując pola znacznika czasu na potrzeby wstawiania lub aktualizacji.

Dane wejściowe

Powiązanie wejściowe usługi Azure Cosmos DB używa interfejsu API SQL, aby pobrać co najmniej jeden dokument usługi Azure Cosmos DB, a następnie przekazuje go do parametru wejściowego funkcji. Identyfikator dokumentu lub parametry zapytania można określić na podstawie wyzwalacza wywołującego funkcję.

Dane wejściowe — przykład

Ta sekcja zawiera następujące przykłady:

Przykłady odnoszą się do prostego ToDoItem typu:

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

Wyzwalacz kolejki, wyszukiwanie identyfikatora w formacie JSON

W poniższym przykładzie pokazano funkcję języka C#, która pobiera pojedynczy dokument. Funkcja jest wyzwalana przez komunikat kolejki zawierający obiekt JSON. Wyzwalacz kolejki analizuje kod JSON do obiektu o nazwie ToDoItemLookup, który zawiera identyfikator do wyszukania. Ten identyfikator służy do pobierania ToDoItem dokumentu z określonej bazy danych i kolekcji.

namespace CosmosDBSamplesV1
{
    public class ToDoItemLookup
    {
        public string ToDoItemId { get; set; }
    }
}
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromJSON
    {
        [FunctionName("DocByIdFromJSON")]
        public static void Run(
            [QueueTrigger("todoqueueforlookup")] ToDoItemLookup toDoItemLookup,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{ToDoItemId}")]ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info($"C# Queue trigger function processed Id={toDoItemLookup?.ToDoItemId}");

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

Wyzwalacz HTTP, wyszukiwanie identyfikatora z ciągu zapytania

W poniższym przykładzie pokazano funkcję języka C#, która pobiera pojedynczy dokument. Funkcja jest wyzwalana przez żądanie HTTP, które używa ciągu zapytania do określenia wyszukiwanego identyfikatora. Ten identyfikator służy do pobierania ToDoItem dokumentu z określonej bazy danych i kolekcji.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromQueryString
    {
        [FunctionName("DocByIdFromQueryString")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{Query.id}")] ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            if (toDoItem == null)
            {
                log.Info($"ToDo item not found");
            }
            else
            {
                log.Info($"Found ToDo item, Description={toDoItem.Description}");
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Wyzwalacz HTTP, wyszukiwanie identyfikatora z danych trasy

W poniższym przykładzie pokazano funkcję języka C#, która pobiera pojedynczy dokument. Funkcja jest wyzwalana przez żądanie HTTP, które używa danych tras do określenia identyfikatora do wyszukania. Ten identyfikator służy do pobierania ToDoItem dokumentu z określonej bazy danych i kolekcji.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromRouteData
    {
        [FunctionName("DocByIdFromRouteData")]
        public static HttpResponseMessage Run(
            [HttpTrigger(
                AuthorizationLevel.Anonymous, "get", "post",
                Route = "todoitems/{id}")]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{id}")] ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

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

Pomiń przykłady danych wejściowych

Wyzwalacz HTTP, wyszukiwanie identyfikatora z danych trasy przy użyciu zapytania SqlQuery

W poniższym przykładzie pokazano funkcję języka C#, która pobiera pojedynczy dokument. Funkcja jest wyzwalana przez żądanie HTTP, które używa danych tras do określenia identyfikatora do wyszukania. Ten identyfikator służy do pobierania ToDoItem dokumentu z określonej bazy danych i kolekcji.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromRouteDataUsingSqlQuery
    {
        [FunctionName("DocByIdFromRouteDataUsingSqlQuery")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post",
                Route = "todoitems2/{id}")]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                SqlQuery = "select * from ToDoItems r where r.id = {id}")] IEnumerable<ToDoItem> toDoItems,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            foreach (ToDoItem toDoItem in toDoItems)
            {
                log.Info(toDoItem.Description);
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Pomiń przykłady danych wejściowych

Wyzwalacz HTTP, uzyskiwanie wielu dokumentów przy użyciu zapytania SqlQuery

W poniższym przykładzie przedstawiono funkcję języka C#, która pobiera listę dokumentów. Funkcja jest wyzwalana przez żądanie HTTP. Zapytanie jest określone we właściwości atrybutu SqlQuery .

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocsBySqlQuery
    {
        [FunctionName("DocsBySqlQuery")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
                HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                SqlQuery = "SELECT top 2 * FROM c order by c._ts desc")]
                IEnumerable<ToDoItem> toDoItems,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            foreach (ToDoItem toDoItem in toDoItems)
            {
                log.Info(toDoItem.Description);
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Pomiń przykłady danych wejściowych

Wyzwalacz HTTP, uzyskiwanie wielu dokumentów przy użyciu klasy DocumentClient (C#)

W poniższym przykładzie przedstawiono funkcję języka C#, która pobiera listę dokumentów. Funkcja jest wyzwalana przez żądanie HTTP. Kod używa wystąpienia dostarczonego DocumentClient przez powiązanie usługi Azure Cosmos DB, aby odczytać listę dokumentów. Wystąpienie DocumentClient może być również używane na potrzeby operacji zapisu.

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 System;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

namespace CosmosDBSamplesV1
{
    public static class DocsByUsingDocumentClient
    {
        [FunctionName("DocsByUsingDocumentClient")]
        public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")] DocumentClient client,
            TraceWriter log)
        {
            log.Info("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.Info($"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.Info(result.Description);
                }
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Dane wejściowe — atrybuty

W bibliotekach klas języka C# w procesie użyj atrybutu DocumentDB .

Konstruktor atrybutu przyjmuje nazwę bazy danych i nazwę kolekcji. Aby uzyskać informacje o tych ustawieniach i innych właściwościach, które można skonfigurować, zobacz następującą sekcję konfiguracji.

Dane wejściowe — konfiguracja

W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w pliku function.json i atrybutu DocumentDB .

właściwość function.json Właściwość atrybutu opis
type nie dotyczy Musi być ustawiona wartość documentdb.
direction nie dotyczy Musi być ustawiona wartość in.
name nie dotyczy Nazwa parametru powiązania, który reprezentuje dokument w funkcji.
databaseName Nazwa bazy danych Baza danych zawierająca dokument.
collectionName CollectionName Nazwa kolekcji zawierającej dokument.
id Id Identyfikator dokumentu do pobrania. Ta właściwość obsługuje wyrażenia powiązań. Nie ustawiaj zarówno właściwości id , jak i sqlQuery . Jeśli nie ustawisz żadnej z nich, cała kolekcja zostanie pobrana.
sqlQuery Zapytanie sql Zapytanie SQL usługi Azure Cosmos DB używane do pobierania wielu dokumentów. Właściwość obsługuje powiązania środowiska uruchomieniowego, jak w tym przykładzie: SELECT * FROM c where c.departmentId = {departmentId}. Nie ustawiaj zarówno właściwości id , jak i sqlQuery . Jeśli nie ustawisz żadnej z nich, cała kolekcja zostanie pobrana.
połączenie ConnectionStringSetting Nazwa ustawienia aplikacji zawierającego parametry połączenia usługi Azure Cosmos DB.
partitionKey PartitionKey Określa wartość klucza partycji dla wyszukiwania. Może zawierać parametry powiązania.

Podczas tworzenia aplikacji lokalnie dodaj ustawienia aplikacji w pliku local.settings.json w kolekcji Values .

Dane wejściowe — użycie

Po pomyślnym zakończeniu działania funkcji wszelkie zmiany wprowadzone w dokumencie wejściowym za pomocą nazwanych parametrów wejściowych są automatycznie utrwalane.

Wyjście

Powiązanie wyjściowe usługi Azure Cosmos DB umożliwia napisanie nowego dokumentu w bazie danych usługi Azure Cosmos DB przy użyciu interfejsu API SQL.

Dane wyjściowe — przykład

Ta sekcja zawiera następujące przykłady:

  • Wyzwalacz kolejki, zapis jednego dokumentu
  • Wyzwalacz kolejki, zapisywanie dokumentów przy użyciu polecenia IAsyncCollector

Przykłady odnoszą się do prostego ToDoItem typu:

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

Wyzwalacz kolejki, zapis jednego dokumentu

W poniższym przykładzie pokazano funkcję języka C#, która dodaje dokument do bazy danych przy użyciu danych podanych w komunikacie z usługi Queue Storage.

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

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

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

Wyzwalacz kolejki, zapisywanie dokumentów przy użyciu klasy IAsyncCollector

W poniższym przykładzie pokazano funkcję języka C#, która dodaje kolekcję dokumentów do bazy danych przy użyciu danych podanych w kodzie JSON komunikatu kolejki.

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

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

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

Dane wyjściowe — atrybuty

W bibliotekach klas języka C# w procesie użyj atrybutu DocumentDB .

Konstruktor atrybutu przyjmuje nazwę bazy danych i nazwę kolekcji. Aby uzyskać informacje o tych ustawieniach i innych właściwościach, które można skonfigurować, zobacz Dane wyjściowe — konfiguracja. Oto przykład atrybutu DocumentDB w podpisie metody:

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

Pełny przykład można znaleźć w temacie Output (Dane wyjściowe).

Dane wyjściowe — konfiguracja

W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w pliku function.json i atrybutu DocumentDB .

właściwość function.json Właściwość atrybutu opis
type nie dotyczy Musi być ustawiona wartość documentdb.
direction nie dotyczy Musi być ustawiona wartość out.
name nie dotyczy Nazwa parametru powiązania, który reprezentuje dokument w funkcji.
databaseName Nazwa bazy danych Baza danych zawierająca kolekcję, w której jest tworzony dokument.
collectionName CollectionName Nazwa kolekcji, w której jest tworzony dokument.
createIfNotExists CreateIfNotExists Wartość logiczna określająca, czy kolekcja jest tworzona, gdy nie istnieje. Wartość domyślna to false , ponieważ nowe kolekcje są tworzone z zarezerwowaną przepływnością, co ma wpływ na koszty. Aby uzyskać więcej informacji, zobacz stronę z cennikiem.
partitionKey PartitionKey Jeśli CreateIfNotExists wartość ma wartość true, definiuje ścieżkę klucza partycji dla utworzonej kolekcji.
collectionThroughput CollectionThroughput W CreateIfNotExists przypadku wartości true definiuje przepływność utworzonej kolekcji.
połączenie ConnectionStringSetting Nazwa ustawienia aplikacji zawierającego parametry połączenia usługi Azure Cosmos DB.

Podczas tworzenia aplikacji lokalnie dodaj ustawienia aplikacji w pliku local.settings.json w kolekcji Values .

Dane wyjściowe — użycie

Domyślnie podczas zapisywania w parametrze wyjściowym w funkcji dokument jest tworzony w bazie danych. Ten dokument ma automatycznie wygenerowany identyfikator GUID jako identyfikator dokumentu. Identyfikator dokumentu wyjściowego można określić, określając id właściwość w obiekcie JSON przekazanym do parametru wyjściowego.

Uwaga

Po określeniu identyfikatora istniejącego dokumentu zostaje on zastąpiony przez nowy dokument wyjściowy.

Wyjątki i kody powrotne

Wiązanie Odwołanie
Azure Cosmos DB Kody stanu HTTP dla usługi Azure Cosmos DB

Następne kroki