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á.
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.
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();
}
}
}
Tato část obsahuje následující příklady:
Příklady triggerů HTTP odkazují na jednoduchý ToDoItem typ:
namespace CosmosDBSamplesV2
{
public class ToDoItem
{
public string Id { get; set; }
public string Description { get; set; }
}
}
Trigger fronty, vyhledávání ID z řetězce
Následující příklad ukazuje vstupní Cosmos DB v souboru function.json a funkci skriptu jazyka C#, která tuto vazbu používá. Funkce přečte jeden dokument a aktualizuje textovou hodnotu dokumentu.
Tady jsou data vazby v souboru function.json:
{
"name": "inputDocument",
"type": "cosmosDB",
"databaseName": "MyDatabase",
"collectionName": "MyCollection",
"id" : "{queueTrigger}",
"partitionKey": "{partition key value}",
"connectionStringSetting": "MyAccount_COSMOSDB",
"direction": "in"
}
Tyto vlastnosti jsou vysvětlené v části Konfigurace.
Tady je kód skriptu jazyka C#:
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.";
}
Trigger fronty, získání více dokumentů pomocí SqlQuery
Následující příklad ukazuje vstupní vazbu Azure Cosmos DB v souboru function.json a funkci skriptu jazyka C#, která tuto vazbu používá. Funkce načítá více dokumentů určených SQL dotazem pomocí triggeru fronty k přizpůsobení parametrů dotazu.
Trigger fronty poskytuje parametr departmentId . Zpráva fronty { "departmentId" : "Finance" } pro by vrátila všechny záznamy pro finanční oddělení.
Tady jsou data vazby v souboru function.json:
{
"name": "documents",
"type": "cosmosDB",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connectionStringSetting": "CosmosDBConnection"
}
Tyto vlastnosti jsou vysvětlené v části Konfigurace.
Tady je kód skriptu jazyka C#:
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; }
}
Trigger HTTP, vyhledávání ID z řetězce dotazu
Následující příklad ukazuje funkci skriptu 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.
Tady je soubor function.json:
{
"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
}
Tady je kód skriptu jazyka C#:
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);
}
Trigger HTTP, vyhledávání ID z dat tras
Následující příklad ukazuje funkci skriptu 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.
Tady je soubor function.json:
{
"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
}
Tady je kód skriptu jazyka C#:
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);
}
Trigger HTTP, získání více dokumentů pomocí SqlQuery
Následující příklad ukazuje funkci skriptu jazyka C#, která načte seznam dokumentů. Funkce se aktivuje požadavkem HTTP. Dotaz je zadán ve vlastnosti SqlQuery atributu.
Tady je soubor function.json:
{
"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
}
Tady je kód skriptu jazyka C#:
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);
}
Trigger HTTP, získání více dokumentů s využitím DocumentClient
Následující příklad ukazuje funkci skriptu 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.
Tady je soubor Function. JSON :
{
"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
}
Tady je kód skriptu jazyka C#:
#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);
}
Tato část obsahuje následující příklady:
Příklady odkazují na jednoduchý ToDoItem Typ:
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 + "}";
}
}
Trigger HTTP, vyhledání ID z řetězce dotazu – parametr řetězce
Následující příklad ukazuje funkci jazyka Java, která načte jeden dokument. Funkce je aktivována požadavkem HTTP, který pomocí řetězce dotazu určuje ID a hodnotu klíče oddílu, které chcete vyhledat. IDENTIFIKÁTOR a hodnota klíče oddílu se používají k načtení dokumentu ze zadané databáze a kolekce ve formě řetězce.
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();
}
}
}
v knihovně modulu runtime functions jazyka Javapoužijte @CosmosDBInput anotaci u parametrů funkce, jejichž hodnota pochází z Cosmos DB. Tato poznámka se dá použít s nativními typy s možnou hodnotou null, Pojo nebo Nullable pomocí Optional<T> .
Trigger HTTP, vyhledání ID z řetězce dotazu – parametr POJO
Následující příklad ukazuje funkci jazyka Java, která načte jeden dokument. Funkce je aktivována požadavkem HTTP, který pomocí řetězce dotazu určuje ID a hodnotu klíče oddílu, které chcete vyhledat. IDENTIFIKÁTOR a hodnota klíče oddílu použité k načtení dokumentu ze zadané databáze a kolekce. Dokument se pak převede na instanci Pojo, která se ToDoItem dřív vytvořila, a předal se jako argument funkce.
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();
}
}
}
Aktivační událost HTTP, vyhledání ID z dat trasy
Následující příklad ukazuje funkci jazyka Java, která načte jeden dokument. Funkce je aktivována požadavkem HTTP, který používá parametr směrování k určení hodnoty ID a klíče oddílu k vyhledání. IDENTIFIKÁTOR a hodnota klíče oddílu slouží k načtení dokumentu ze zadané databáze a kolekce a jejich vrácení jako 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();
}
}
}
Aktivační událost HTTP, vyhledání ID z dat trasy, použití SqlQuery
Následující příklad ukazuje funkci jazyka Java, která načte jeden dokument. Funkce je aktivována požadavkem HTTP, který používá parametr směrování k určení ID, které se má vyhledat. Toto ID se používá k načtení dokumentu ze zadané databáze a kolekce a převod výsledné sady na ToDoItem[] , protože v závislosti na kritériích dotazu může být vráceno mnoho dokumentů.
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();
}
}
}
Aktivační událost HTTP, získání více dokumentů z dat směrování pomocí SqlQuery
Následující příklad ukazuje funkci jazyka Java, která načte více dokumentů. Funkce se aktivuje požadavkem HTTP, který používá parametr směrování desc k určení řetězce, který se má v description poli vyhledat. Hledaný termín slouží k načtení kolekce dokumentů ze zadané databáze a kolekce, převodu výsledku sady výsledků na objekt ToDoItem[] a jeho předání jako argumentu funkce.
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();
}
}
}
Tato část obsahuje následující příklady, které čtou jeden dokument zadáním hodnoty ID z různých zdrojů:
Aktivační událost fronty, vyhledání ID z formátu JSON
následující příklad ukazuje vstupní vazbu Cosmos DB v souboru function. json a funkci javascriptu , která používá vazbu. Funkce přečte jeden dokument a aktualizuje textovou hodnotu dokumentu.
Tady jsou data vazby v souboru Function. JSON :
{
"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"
}
Tyto vlastnosti jsou vysvětleny v části Konfigurace .
Tady je kód JavaScriptu:
// 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();
};
Aktivační událost HTTP, vyhledání ID z řetězce dotazu
Následující příklad ukazuje funkci JavaScriptu , která načte jeden dokument. Funkce je aktivována požadavkem HTTP, který pomocí řetězce dotazu určuje ID a hodnotu klíče oddílu, které chcete vyhledat. IDENTIFIKÁTOR a hodnota klíče oddílu se používají k načtení ToDoItem dokumentu ze zadané databáze a kolekce.
Tady je soubor Function. JSON :
{
"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
}
Tady je kód JavaScriptu:
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();
};
Aktivační událost HTTP, vyhledání ID z dat trasy
Následující příklad ukazuje funkci JavaScriptu , která načte jeden dokument. Funkce je aktivována požadavkem HTTP, který používá data směrování k určení hodnoty ID a klíče oddílu k vyhledání. IDENTIFIKÁTOR a hodnota klíče oddílu se používají k načtení ToDoItem dokumentu ze zadané databáze a kolekce.
Tady je soubor Function. JSON :
{
"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
}
Tady je kód JavaScriptu:
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();
};
Aktivační událost fronty, získání více dokumentů pomocí SqlQuery
následující příklad ukazuje vstupní vazbu Azure Cosmos DB v souboru function. json a funkci javascriptu , která používá vazbu. funkce načte více dokumentů určených SQLm dotazem pomocí triggeru fronty k přizpůsobení parametrů dotazu.
Aktivační událost fronty poskytuje parametr departmentId . Zpráva fronty { "departmentId" : "Finance" } by vrátila všechny záznamy finančního oddělení.
Tady jsou data vazby v souboru Function. JSON :
{
"name": "documents",
"type": "cosmosDB",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connectionStringSetting": "CosmosDBConnection"
}
Tyto vlastnosti jsou vysvětleny v části Konfigurace .
Tady je kód JavaScriptu:
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();
};
Aktivační událost fronty, vyhledání ID z formátu JSON
následující příklad ukazuje, jak číst a aktualizovat jeden Cosmos DB dokument. Jedinečný identifikátor dokumentu se poskytuje prostřednictvím hodnoty JSON ve zprávě fronty.
vstupní vazba Cosmos DB je uvedena jako první v seznamu vazeb nalezených v konfiguračním souboru funkce (function. json).
{
"name": "InputDocumentIn",
"type": "cosmosDB",
"databaseName": "MyDatabase",
"collectionName": "MyCollection",
"id": "{queueTrigger_payload_property}",
"partitionKey": "{queueTrigger_payload_property}",
"connectionStringSetting": "CosmosDBConnection",
"direction": "in"
},
{
"name": "InputDocumentOut",
"type": "cosmosDB",
"databaseName": "MyDatabase",
"collectionName": "MyCollection",
"createIfNotExists": false,
"partitionKey": "{queueTrigger_payload_property}",
"connectionStringSetting": "CosmosDBConnection",
"direction": "out"
}
run.ps1 soubor obsahuje kód prostředí PowerShell, který čte příchozí dokument a výstupy změn.
param($QueueItem, $InputDocumentIn, $TriggerMetadata)
$Document = $InputDocumentIn
$Document.text = 'This was updated!'
Push-OutputBinding -Name InputDocumentOut -Value $Document
Aktivační událost HTTP, vyhledání ID z řetězce dotazu
následující příklad ukazuje, jak číst a aktualizovat jeden Cosmos DB dokument z webového rozhraní API. Jedinečný identifikátor dokumentu se poskytuje prostřednictvím parametru QueryString z požadavku HTTP, jak je definováno ve "Id": "{Query.Id}" vlastnosti vazby.
vstupní vazba Cosmos DB je uvedena jako první v seznamu vazeb nalezených v konfiguračním souboru funkce (function. json).
{
"bindings": [
{
"type": "cosmosDB",
"name": "ToDoItem",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connectionStringSetting": "CosmosDBConnection",
"direction": "in",
"Id": "{Query.id}",
"PartitionKey": "{Query.partitionKeyValue}"
},
{
"authLevel": "anonymous",
"name": "Request",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "Response",
"type": "http",
"direction": "out"
},
],
"disabled": false
}
Soubor run.ps1 obsahuje kód prostředí PowerShell, který čte příchozí dokument a výstupy změn.
using namespace System.Net
param($Request, $ToDoItem, $TriggerMetadata)
Write-Host 'PowerShell HTTP trigger function processed a request'
if (-not $ToDoItem) {
Write-Host 'ToDo item not found'
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::NotFound
Body = $ToDoItem.Description
})
} else {
Write-Host "Found ToDo item, Description=$($ToDoItem.Description)"
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $ToDoItem.Description
})
}
Aktivační událost HTTP, vyhledání ID z dat trasy
následující příklad ukazuje, jak číst a aktualizovat jeden Cosmos DB dokument z webového rozhraní API. Jedinečný identifikátor dokumentu se poskytuje prostřednictvím parametru směrování. parametr route je definovaný ve vlastnosti vazby požadavku HTTP route a odkazuje na "Id": "{Id}" vlastnost binding Cosmos DB.
vstupní vazba Cosmos DB je uvedena jako první v seznamu vazeb nalezených v konfiguračním souboru funkce (function. json).
{
"bindings": [
{
"type": "cosmosDB",
"name": "ToDoItem",
"databaseName": "ToDoItems",
"collectionName": "Items",
"connectionStringSetting": "CosmosDBConnection",
"direction": "in",
"Id": "{id}",
"PartitionKey": "{partitionKeyValue}"
},
{
"authLevel": "anonymous",
"name": "Request",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
],
"route": "todoitems/{partitionKeyValue}/{id}"
},
{
"name": "Response",
"type": "http",
"direction": "out"
}
],
"disabled": false
}
Soubor run.ps1 obsahuje kód prostředí PowerShell, který čte příchozí dokument a výstupy změn.
using namespace System.Net
param($Request, $ToDoItem, $TriggerMetadata)
Write-Host 'PowerShell HTTP trigger function processed a request'
if (-not $ToDoItem) {
Write-Host 'ToDo item not found'
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::NotFound
Body = $ToDoItem.Description
})
} else {
Write-Host "Found ToDo item, Description=$($ToDoItem.Description)"
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $ToDoItem.Description
})
}
Aktivační událost fronty, získání více dokumentů pomocí SqlQuery
následující příklad ukazuje, jak číst více Cosmos DB dokumentů. Konfigurační soubor funkce (Function. JSON) definuje vlastnosti vazby, které zahrnují sqlQuery . příkaz SQL poskytnutý sqlQuery vlastnosti vybere sadu dokumentů poskytnutých funkci.
{
"name": "Documents",
"type": "cosmosDB",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connectionStringSetting": "CosmosDBConnection"
}
Soubor Run1.PS obsahuje kód prostředí PowerShell, který čte příchozí dokumenty.
param($QueueItem, $Documents, $TriggerMetadata)
foreach ($Document in $Documents) {
# operate on each document
}
Tato část obsahuje následující příklady, které čtou jeden dokument zadáním hodnoty ID z různých zdrojů:
Aktivační událost fronty, vyhledání ID z formátu JSON
Následující příklad ukazuje vstupní Cosmos DB v souboru function.json a funkci Pythonu, která tuto vazbu používá. Funkce přečte jeden dokument a aktualizuje textovou hodnotu dokumentu.
Tady jsou data vazby v souboru function.json:
{
"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"
}
Tyto vlastnosti jsou vysvětlené v části Konfigurace.
Tady je kód Pythonu:
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
Trigger HTTP, vyhledávání ID z řetězce dotazu
Následující příklad ukazuje funkci Pythonu, 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.
Tady je soubor function.json:
{
"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}"
}
],
"scriptFile": "__init__.py"
}
Tady je kód Pythonu:
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'
Trigger HTTP, vyhledávání ID z dat tras
Následující příklad ukazuje funkci Pythonu, 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.
Tady je soubor function.json:
{
"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"
}
Tady je kód Pythonu:
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'
Trigger fronty, získání více dokumentů pomocí SqlQuery
Následující příklad ukazuje vstupní vazbu Azure Cosmos DB v souboru function.json a funkci Pythonu, která tuto vazbu používá. Funkce načítá více dokumentů určených SQL dotazem pomocí triggeru fronty k přizpůsobení parametrů dotazu.
Trigger fronty poskytuje parametr departmentId . Zpráva fronty { "departmentId" : "Finance" } by vrátila všechny záznamy pro finanční oddělení.
Tady jsou data vazby v souboru function.json:
{
"name": "documents",
"type": "cosmosDB",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connectionStringSetting": "CosmosDBConnection"
}
Tyto vlastnosti jsou vysvětlené v části Konfigurace.
Tady je kód Pythonu:
import azure.functions as func
def main(queuemsg: func.QueueMessage, documents: func.DocumentList):
for document in documents:
# operate on each document
Následující tabulka vysvětluje vlastnosti konfigurace vazby, které nastavíte v souboru function.json a CosmosDB atributu .