Vstupní vazba Azure Cosmos DB pro Azure Functions 2.x a vyšší

Vstupní vazba služby Azure Cosmos DB načítá pomocí rozhraní SQL API jeden nebo více dokumentů Azure Cosmos DB a předává je do vstupního parametru funkce. Parametry ID dokumentu nebo dotaz se dají určit podle aktivační události, která funkci volá.

Informace o nastavení a podrobnostech o konfiguraci najdete v přehledu.

Poznámka

Pokud je kolekce rozdělená na oddíly,musí operace vyhledávání také zadat hodnotu klíče oddílu.

Tato část obsahuje následující příklady:

Příklady odkazují na jednoduchý ToDoItem typ:

namespace CosmosDBSamplesV2
{
    public class ToDoItem
    {
        [JsonProperty("id")]
        public string Id { get; set; }

        [JsonProperty("partitionKey")]
        public string PartitionKey { get; set; }

        public string Description { get; set; }
    }
}

Trigger fronty, vyhledávání ID ve formátu JSON

Následující příklad ukazuje funkci jazyka C#, která načte jeden dokument. Funkce se aktivuje zprávou fronty, která obsahuje objekt JSON. Trigger fronty parsuje JSON na objekt typu , který obsahuje hodnotu ID a ToDoItemLookup klíč oddílu, které se mají hledat. Toto ID a hodnota klíče oddílu se používají k načtení dokumentu ze zadané databáze a ToDoItem kolekce.

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}");
            }
        }
    }
}

Trigger HTTP, vyhledávání ID z řetězce dotazu

Následující příklad ukazuje funkci jazyka C#, která načte jeden dokument. Funkce se aktivuje požadavkem HTTP, který pomocí řetězce dotazu určuje ID a hodnotu klíče oddílu, které se mají hledat. Toto ID a hodnota klíče oddílu se používají k načtení dokumentu ze zadané databáze a ToDoItem kolekce.

Poznámka

V parametru řetězce dotazu HTTP se rozlišují malá a velká písmena.

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();
        }
    }
}

Trigger HTTP, vyhledávání ID z dat tras

Následující příklad ukazuje funkci jazyka C#, která načte jeden dokument. Funkce se aktivuje požadavkem HTTP, který používá data tras k určení hodnoty ID a klíče oddílu, které se mají hledat. Toto ID a hodnota klíče oddílu se používají k načtení dokumentu ze zadané databáze a ToDoItem kolekce.

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();
        }
    }
}

Trigger HTTP, vyhledávání ID z dat tras pomocí SqlQuery

Následující příklad ukazuje funkci jazyka C#, která načte jeden dokument. Funkce se aktivuje požadavkem HTTP, který používá data tras k určení ID, které se má hledat. Toto ID slouží k načtení dokumentu ze zadané databáze a ToDoItem kolekce.

Příklad ukazuje, jak použít vazbový výraz v SqlQuery parametru . Do parametru můžete předat data trasy, jak je znázorněno, ale aktuálně nemůžete SqlQuery předat řetězcové hodnoty dotazu.

Poznámka

Pokud potřebujete dotazovat pouze podle ID, doporučujeme použít vyhledávání, podobně jako v předchozích příkladech ,protože spotřebuje méně jednotek žádosti. Operace čtení bodů (GET) jsou efektivnější než dotazy podle 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();
        }
    }
}

Trigger HTTP, získání více dokumentů pomocí SqlQuery

Následující příklad ukazuje funkci jazyka C#, která načte seznam dokumentů. Funkce se aktivuje požadavkem HTTP. Dotaz je zadán ve vlastnosti SqlQuery atributu.

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();
        }
    }
}

Trigger HTTP, získání více dokumentů s využitím DocumentClient

Následující příklad ukazuje funkci jazyka C#, která načte seznam dokumentů. Funkce se aktivuje požadavkem HTTP. Kód používá instanci DocumentClient poskytnutou vazbou Azure Cosmos DB ke čtení seznamu dokumentů. Instanci DocumentClient lze také použít pro operace zápisu.

Poznámka

K usnadnění testování můžete použít také rozhraní IDocumentClient.

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();
        }
    }
}

Trigger HTTP, získání více dokumentů pomocí CosmosClient

Následující příklad ukazuje funkci jazyka C#, která načte seznam dokumentů. Funkce se aktivuje požadavkem HTTP. Kód používá instanci poskytovanou vazbou Azure Cosmos DB dostupnou v rozšíření verze CosmosClient 4.xke čtení seznamu dokumentů. Instanci CosmosClient lze také použít pro operace zápisu.

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

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

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

            Container container = client.GetDatabase("ToDoItems").GetContainer("Items");

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

            QueryDefinition queryDefinition = new QueryDefinition(
                "SELECT * FROM items i WHERE CONTAINS(i.Description, @searchterm)")
                .WithParameter("@searchterm", searchterm);
            using (FeedIterator<ToDoItem> resultSet = container.GetItemQueryIterator<ToDoItem>(queryDefinition))
            {
                while (resultSet.HasMoreResults)
                {
                    FeedResponse<ToDoItem> response = await resultSet.ReadNextAsync();
                    ToDoItem item = response.First();
                    log.LogInformation(item.Description);
                }
            }

            return new OkResult();
        }
    }
}

Atributy a poznámky

V knihovnách tříd jazyka C#použijte atribut CosmosDB.

Konstruktor atributu přebírá název databáze a název kolekce. V rozšíření verze 4.x byla odebrána nebo přejmenována některá nastavení a vlastnosti. Informace o nastaveních a dalších vlastnostech, které můžete nakonfigurovat pro všechny verze, najdete v následující části konfigurace.

Konfigurace

Následující tabulka vysvětluje vlastnosti konfigurace vazby, které nastavíte v souboru function.json a CosmosDB atributu .

function.json – vlastnost Vlastnost atributu Popis
Typ Není k dispozici Musí být nastavená na cosmosDB .
směr Není k dispozici Musí být nastavená na in .
Jméno Není k dispozici Název parametru vazby, který představuje dokument ve funkci.
Databasename DatabaseName Databáze obsahující dokument.
collectionName (název kolekce)
nebo
containerName (název kontejneru)
Název kolekce
nebo
ContainerName
Název kolekce, která obsahuje dokument.

Ve verzi 4.x rozšíření se tato vlastnost nazývá ContainerName .
id Id ID dokumentu, který se má načíst. Tato vlastnost podporuje vazbové výrazy. Nastavte vlastnosti id i sqlQuery. Pokud ani jednu z nich nezadáte, načte se celá kolekce.
SqlQuery SqlQuery Azure Cosmos DB SQL dotaz použitý k načtení více dokumentů. Vlastnost podporuje vazby modulu runtime, jako v tomto příkladu: SELECT * FROM c where c.departmentId = {departmentId} . Nastavte vlastnosti id i sqlQuery . Pokud ani jednu z nich nezadáte, načte se celá kolekce.
connectionStringSetting
nebo
Připojení
ConnectionStringSetting
nebo
Připojení
Název nastavení aplikace obsahující připojovací řetězec Azure Cosmos DB.

Ve verzi 4.x rozšíření se tato vlastnost nazývá Connection . Hodnota je název nastavení aplikace, které obsahuje připojovací řetězec nebo konfigurační oddíl nebo předponu definující připojení. Viz Připojení.
klíč oddílu PartitionKey Určuje hodnotu klíče oddílu pro vyhledávání. Může obsahovat parametry vazby. Vyžaduje se pro vyhledávání v dělené kolekci.
preferredLocations PreferredLocations (Volitelné) Definuje upřednostňovaná umístění (oblasti) pro geograficky replikované databázové účty ve službě Azure Cosmos DB. Hodnoty by měly být oddělené čárkami. Například "USA – východ,USA – středojih,Severní Evropa".

Když vyvíjíte místně, nastavení aplikace se přechádí do local.settings.jssouboru.

Využití

Po úspěšném ukončení funkce budou všechny změny provedené v vstupním dokumentu pomocí pojmenovaných vstupních parametrů automaticky trvalé.

Další kroky