Bij een Azure Cosmos DB-invoerbinding wordt de SQL-API gebruikt voor het ophalen van een of meer Azure Cosmos DB-documenten en het doorgeven daarvan aan de invoerparameter van de functie. De document-id of queryparameters kunnen worden bepaald op basis van de trigger waarmee de functie wordt geactiveerd.
Deze sectie bevat de volgende voorbeelden:
De voorbeelden verwijzen naar een eenvoudig ToDoItem type:
namespace CosmosDBSamplesV2
{
public class ToDoItem
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("partitionKey")]
public string PartitionKey { get; set; }
public string Description { get; set; }
}
}
Wachtrijtrigger, id op zoek vanuit JSON
In het volgende voorbeeld ziet u een C#-functie die één document op haalt. De functie wordt geactiveerd door een wachtrijbericht dat een JSON-object bevat. De wachtrijtrigger parseert de JSON in een object van het type , dat de id en partitiesleutelwaarde bevat om ToDoItemLookup op te zoeken. Deze id en partitiesleutelwaarde worden gebruikt om een ToDoItem document op te halen uit de opgegeven database en verzameling.
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}");
}
}
}
}
HTTP-trigger, id opvragen uit queryreeks
In het volgende voorbeeld ziet u een C#-functie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een queryreeks om de id en partitiesleutelwaarde op te zoeken. Deze id en partitiesleutelwaarde worden gebruikt om een ToDoItem document op te halen uit de opgegeven database en verzameling.
Notitie
De http-queryreeksparameter is casegevoelig.
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();
}
}
}
HTTP-trigger, id op zoeken uit routegegevens
In het volgende voorbeeld ziet u een C#-functie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van routegegevens om de id en partitiesleutelwaarde op te geven die moeten worden opgevraagd. Deze id en partitiesleutelwaarde worden gebruikt om een ToDoItem document op te halen uit de opgegeven database en verzameling.
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();
}
}
}
HTTP-trigger, zoek de id van routegegevens op met behulp van SqlQuery
In het volgende voorbeeld ziet u een C#-functie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die routegegevens gebruikt om de id op te geven die moet worden opgevraagd. Deze id wordt gebruikt om een ToDoItem document op te halen uit de opgegeven database en verzameling.
In het voorbeeld ziet u hoe u een bindingexpressie gebruikt in de SqlQuery parameter . U kunt routegegevens doorgeven aan de parameter zoals weergegeven, maar op dit moment kunt u SqlQuery geen queryreekswaarden doorgeven.
Notitie
Als u alleen de id wilt opvragen, is het raadzaam om op te zoeken, zoals in de vorige voorbeelden, omdat er minder aanvraageenheden worden verbruikt. Punt-leesbewerkingen (GET) zijn efficiënter dan query's op 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();
}
}
}
HTTP-trigger, meerdere documenten downloaden met behulp van SqlQuery
In het volgende voorbeeld ziet u een C#-functie die een lijst met documenten op haalt. De functie wordt geactiveerd door een HTTP-aanvraag. De query wordt opgegeven in de SqlQuery kenmerkeigenschappen.
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();
}
}
}
HTTP-trigger, meerdere documenten downloaden met documentClient
In het volgende voorbeeld ziet u een C#-functie die een lijst met documenten op haalt. De functie wordt geactiveerd door een HTTP-aanvraag. De code maakt gebruik van een exemplaar dat door de DocumentClient Azure Cosmos DB binding om een lijst met documenten te lezen. Het DocumentClient exemplaar kan ook worden gebruikt voor schrijfbewerkingen.
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();
}
}
}
HTTP-trigger, meerdere documenten downloaden met cosmosClient
In het volgende voorbeeld ziet u een C#-functie die een lijst met documenten op haalt. De functie wordt geactiveerd door een HTTP-aanvraag. De code maakt gebruik van een exemplaar dat wordt geleverd CosmosClient door de Azure Cosmos DB-binding, die beschikbaar is in extensieversie 4.x,om een lijst met documenten te lezen. Het CosmosClient exemplaar kan ook worden gebruikt voor schrijfbewerkingen.
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();
}
}
}
Deze sectie bevat de volgende voorbeelden:
De http-triggervoorbeelden verwijzen naar een eenvoudig ToDoItem type:
namespace CosmosDBSamplesV2
{
public class ToDoItem
{
public string Id { get; set; }
public string Description { get; set; }
}
}
Wachtrijtrigger, zoek id op uit tekenreeks
In het volgende voorbeeld ziet u Cosmos DB invoerbinding in een function.json-bestand en een C#-scriptfunctie die gebruikmaakt van de binding. De functie leest één document en werkt de tekstwaarde van het document bij.
Dit zijn de bindingsgegevens in het bestand function.json:
{
"name": "inputDocument",
"type": "cosmosDB",
"databaseName": "MyDatabase",
"collectionName": "MyCollection",
"id" : "{queueTrigger}",
"partitionKey": "{partition key value}",
"connectionStringSetting": "MyAccount_COSMOSDB",
"direction": "in"
}
In de configuratiesectie worden deze eigenschappen uitgelegd.
Dit is de 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.";
}
Wachtrijtrigger, meerdere documenten downloaden met behulp van SqlQuery
In het volgende voorbeeld ziet u Azure Cosmos DB invoerbinding in een function.json-bestand en een C#-scriptfunctie die gebruikmaakt van de binding. De functie haalt meerdere documenten op die zijn opgegeven door een SQL query, met behulp van een wachtrijtrigger om de queryparameters aan te passen.
De wachtrijtrigger biedt een parameter departmentId . Er wordt een { "departmentId" : "Finance" } wachtrijbericht van weergegeven met alle records voor de afdeling Financiën.
Dit zijn de bindingsgegevens in het bestand function.json:
{
"name": "documents",
"type": "cosmosDB",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connectionStringSetting": "CosmosDBConnection"
}
In de configuratiesectie worden deze eigenschappen uitgelegd.
Dit is de 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; }
}
HTTP-trigger, id opvragen uit queryreeks
In het volgende voorbeeld ziet u een C#-scriptfunctie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een queryreeks om de id en partitiesleutelwaarde op te zoeken. Deze id en partitiesleutelwaarde worden gebruikt om een ToDoItem document op te halen uit de opgegeven database en verzameling.
Dit is het bestand 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
}
Dit is de 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);
}
HTTP-trigger, id op zoeken uit routegegevens
In het volgende voorbeeld ziet u een C#-scriptfunctie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van routegegevens om de id en partitiesleutelwaarde op te geven die moeten worden opgevraagd. Deze id en partitiesleutelwaarde worden gebruikt om een ToDoItem document op te halen uit de opgegeven database en verzameling.
Dit is het bestand 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
}
Dit is de 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);
}
HTTP-trigger, meerdere documenten downloaden met behulp van SqlQuery
In het volgende voorbeeld ziet u een C#-scriptfunctie die een lijst met documenten op haalt. De functie wordt geactiveerd door een HTTP-aanvraag. De query wordt opgegeven in de SqlQuery kenmerkeigenschappen.
Dit is het bestand 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
}
Dit is de 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);
}
HTTP-trigger, meerdere documenten downloaden met documentClient
In het volgende voorbeeld ziet u een C#-scriptfunctie die een lijst met documenten op haalt. De functie wordt geactiveerd door een HTTP-aanvraag. De code maakt gebruik van een exemplaar dat door de DocumentClient Azure Cosmos DB binding om een lijst met documenten te lezen. Het DocumentClient exemplaar kan ook worden gebruikt voor schrijfbewerkingen.
Dit is het bestand 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
}
Dit is de 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);
}
Deze sectie bevat de volgende voorbeelden:
De voorbeelden verwijzen naar een eenvoudig 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-trigger, id opvragen uit queryreeks - tekenreeksparameter
In het volgende voorbeeld ziet u een Java-functie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een queryreeks om de id en partitiesleutelwaarde op te zoeken. Deze id en partitiesleutelwaarde worden gebruikt om een document op te halen uit de opgegeven database en verzameling, in tekenreeksvorm.
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();
}
}
}
Gebruik in de Java Functions-runtimebibliotheekde aantekening voor functieparameters waarvan de waarde afkomstig is @CosmosDBInput uit Cosmos DB. Deze aantekening kan worden gebruikt met systeemeigen Java-typen, POJO's of nullbare waarden met Optional<T>.
HTTP-trigger, id opvragen uit queryreeks - POJO-parameter
In het volgende voorbeeld ziet u een Java-functie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een queryreeks om de id en partitiesleutelwaarde op te zoeken. Die id en partitiesleutelwaarde die worden gebruikt om een document op te halen uit de opgegeven database en verzameling. Het document wordt vervolgens geconverteerd naar een exemplaar van de POJO dat u eerder hebt gemaakt en als ToDoItem argument doorgegeven aan de functie.
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-trigger, id op zoeken uit routegegevens
In het volgende voorbeeld ziet u een Java-functie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een routeparameter om de id en partitiesleutelwaarde op te zoeken. Deze id en partitiesleutelwaarde worden gebruikt om een document op te halen uit de opgegeven database en verzameling, en te retourneren als een 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-trigger, zoek de id van routegegevens op met behulp van SqlQuery
In het volgende voorbeeld ziet u een Java-functie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een routeparameter om de id op te geven die moet worden opgevraagd. Deze id wordt gebruikt om een document op te halen uit de opgegeven database en verzameling, waardoor de resultatenset wordt ge converteerd naar een , omdat er veel documenten kunnen worden geretourneerd, afhankelijk van de ToDoItem[] querycriteria.
Notitie
Als u alleen de id wilt opvragen, is het raadzaam om op te zoeken, zoals in de vorige voorbeelden, omdat er minder aanvraageenheden worden verbruikt. Punt-leesbewerkingen (GET) zijn efficiënter dan query's op 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-trigger, haal meerdere documenten op uit routegegevens met behulp van SqlQuery
In het volgende voorbeeld ziet u een Java-functie die meerdere documenten op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een routeparameter om de tekenreeks op te geven desc waar in het veld naar moet worden description gezocht. De zoekterm wordt gebruikt om een verzameling documenten op te halen uit de opgegeven database en verzameling, de resultatenset te converteren naar een en als argument door te geven ToDoItem[] aan de functie .
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();
}
}
}
Deze sectie bevat de volgende voorbeelden die één document lezen door een id-waarde uit verschillende bronnen op te geven:
Wachtrijtrigger, id op zoek vanuit JSON
In het volgende voorbeeld ziet u Cosmos DB invoerbinding in een function.json-bestand en een JavaScript-functie die gebruikmaakt van de binding. De functie leest één document en werkt de tekstwaarde van het document bij.
Dit zijn de bindingsgegevens in het bestand 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"
}
In de configuratiesectie worden deze eigenschappen uitgelegd.
Dit is de 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();
};
HTTP-trigger, id opvragen uit queryreeks
In het volgende voorbeeld ziet u een JavaScript-functie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een queryreeks om de id en partitiesleutelwaarde op te zoeken. Deze id en partitiesleutelwaarde worden gebruikt om een ToDoItem document op te halen uit de opgegeven database en verzameling.
Dit is het bestand 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
}
Dit is de 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();
};
HTTP-trigger, id op zoeken uit routegegevens
In het volgende voorbeeld ziet u een JavaScript-functie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van routegegevens om de id en partitiesleutelwaarde op te geven die moeten worden opgevraagd. Deze id en partitiesleutelwaarde worden gebruikt om een ToDoItem document op te halen uit de opgegeven database en verzameling.
Dit is het bestand 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
}
Dit is de 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();
};
Wachtrijtrigger, meerdere documenten downloaden met behulp van SqlQuery
In het volgende voorbeeld ziet u Azure Cosmos DB invoerbinding in een function.json-bestand en een JavaScript-functie die gebruikmaakt van de binding. De functie haalt meerdere documenten op die zijn opgegeven door een SQL query, met behulp van een wachtrijtrigger om de queryparameters aan te passen.
De wachtrijtrigger biedt een parameter departmentId . Er wordt een { "departmentId" : "Finance" } wachtrijbericht van weergegeven met alle records voor de afdeling Financiën.
Dit zijn de bindingsgegevens in het bestand function.json:
{
"name": "documents",
"type": "cosmosDB",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connectionStringSetting": "CosmosDBConnection"
}
In de configuratiesectie worden deze eigenschappen uitgelegd.
Dit is de 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();
};
Wachtrijtrigger, id op zoek vanuit JSON
In het volgende voorbeeld wordt gedemonstreerd hoe u één document Cosmos DB bijwerken. De unieke id van het document wordt geleverd via de JSON-waarde in een wachtrijbericht.
De Cosmos DB invoerbinding wordt eerst vermeld in de lijst met bindingen in het configuratiebestand van de functie (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"
}
Het run.ps1 bevat de PowerShell-code waarmee het binnenkomende document wordt gelezen en wijzigingen worden uitgevoerd.
param($QueueItem, $InputDocumentIn, $TriggerMetadata)
$Document = $InputDocumentIn
$Document.text = 'This was updated!'
Push-OutputBinding -Name InputDocumentOut -Value $Document
HTTP-trigger, id opvragen uit queryreeks
In het volgende voorbeeld wordt gedemonstreerd hoe u één document Cosmos DB een web-API kunt lezen en bijwerken. De unieke id van het document wordt geleverd via een queryreeksparameter van de HTTP-aanvraag, zoals gedefinieerd in de eigenschap van de "Id": "{Query.Id}" binding.
De Cosmos DB invoerbinding wordt eerst vermeld in de lijst met bindingen in het configuratiebestand van de functie (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
}
Het run.ps1 bevat de PowerShell-code waarmee het binnenkomende document wordt gelezen en wijzigingen worden uitgevoerd.
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
})
}
HTTP-trigger, id op zoeken uit routegegevens
In het volgende voorbeeld wordt gedemonstreerd hoe u één document Cosmos DB een web-API kunt lezen en bijwerken. De unieke id van het document wordt geleverd via een routeparameter. De routeparameter wordt gedefinieerd in de eigenschap van de HTTP-aanvraagbinding en er wordt naar route verwezen in de Cosmos DB "Id": "{Id}" bindings-eigenschap.
De Cosmos DB invoerbinding wordt eerst vermeld in de lijst met bindingen in het configuratiebestand van de functie (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
}
Het run.ps1 bevat de PowerShell-code waarmee het binnenkomende document wordt gelezen en wijzigingen worden uitgevoerd.
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
})
}
Wachtrijtrigger, meerdere documenten downloaden met behulp van SqlQuery
In het volgende voorbeeld wordt gedemonstreerd hoe u meerdere Cosmos DB leest. Het configuratiebestand van de functie (function.json) definieert de bindingseigenschappen, die de sqlQuery bevat. Met SQL-instructie die aan de eigenschap sqlQuery wordt geleverd, wordt de set documenten geselecteerd die aan de functie zijn verstrekt.
{
"name": "Documents",
"type": "cosmosDB",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connectionStringSetting": "CosmosDBConnection"
}
Het run1.ps bevat de PowerShell-code waarmee de binnenkomende documenten worden gelezen.
param($QueueItem, $Documents, $TriggerMetadata)
foreach ($Document in $Documents) {
# operate on each document
}
Deze sectie bevat de volgende voorbeelden die één document lezen door een id-waarde uit verschillende bronnen op te geven:
Wachtrijtrigger, id op zoek vanuit JSON
In het volgende voorbeeld ziet u Cosmos DB invoerbinding in een function.json-bestand en een Python-functie die gebruikmaakt van de binding. De functie leest één document en werkt de tekstwaarde van het document bij.
Dit zijn de bindingsgegevens in het bestand 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"
}
In de configuratiesectie worden deze eigenschappen uitgelegd.
Dit is de 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
HTTP-trigger, id opvragen uit queryreeks
In het volgende voorbeeld ziet u een Python-functie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een queryreeks om de id en partitiesleutelwaarde op te geven die moeten worden opgevraagd. Deze id en partitiesleutelwaarde worden gebruikt om een document op ToDoItem te halen uit de opgegeven database en verzameling.
Dit is het bestand 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"
}
Dit is de 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'
HTTP-trigger, id op zoeken uit routegegevens
In het volgende voorbeeld ziet u een Python-functie die één document op haalt. De functie wordt geactiveerd door een HTTP-aanvraag die routegegevens gebruikt om de id en partitiesleutelwaarde op te geven die moeten worden opgevraagd. Deze id en partitiesleutelwaarde worden gebruikt om een document op ToDoItem te halen uit de opgegeven database en verzameling.
Dit is het bestand 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"
}
Dit is de 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'
Wachtrijtrigger, meerdere documenten downloaden met behulp van SqlQuery
In het volgende voorbeeld ziet u Azure Cosmos DB invoerbinding in een function.json-bestand en een Python-functie die gebruikmaakt van de binding. De functie haalt meerdere documenten op die zijn opgegeven door een SQL query, met behulp van een wachtrijtrigger om de queryparameters aan te passen.
De wachtrijtrigger biedt een parameter departmentId . Een wachtrijbericht van { "departmentId" : "Finance" } zou alle records voor de afdeling Financiën retourneren.
Dit zijn de bindingsgegevens in het bestand function.json:
{
"name": "documents",
"type": "cosmosDB",
"direction": "in",
"databaseName": "MyDb",
"collectionName": "MyCollection",
"sqlQuery": "SELECT * from c where c.departmentId = {departmentId}",
"connectionStringSetting": "CosmosDBConnection"
}
In de configuratiesectie worden deze eigenschappen uitgelegd.
Dit is de Python-code:
import azure.functions as func
def main(queuemsg: func.QueueMessage, documents: func.DocumentList):
for document in documents:
# operate on each document
De volgende tabel bevat informatie over de bindingsconfiguratie-eigenschappen die u instelt in het bestand function.json en het kenmerk CosmosDB.