Функция Azure V2 против Cosmos Db DocumentClient - PullRequest
0 голосов
/ 26 мая 2018

Мне нужно написать функцию Azure, которая возвращает данные в базу данных Cosmos DB, используя версию 2 функций Azure.Тем не менее, мне трудно найти хорошие примеры того, как это сделать.Я могу найти очень простые примеры, которые включают поиск по идентификатору.

Я хочу иметь возможность отправить функции Azure некоторые поля для запроса.Такие, как «Likes» и «City» с разделом и вне раздела.Я хочу, чтобы он возвращал все записи в формате json.

Пример документа Cosmos DB Json.

{ "id": "46465464565455566546bddgd" "Name": "Scott Smith" "City": "Scottsdale" "_pk": "56"

Мой код пока что

`
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;

using Newtonsoft.Json;

пространство имен csharp {открытый статический класс GetData {

    private static readonly string CosmosDbApiKey = Environment.GetEnvironmentVariable("CosmosDbApiKey");
    private static readonly string CosmosDbUri = Environment.GetEnvironmentVariable("CosmosDbUri");
    private static readonly DocumentClient DocumentClient = new DocumentClient(new Uri(CosmosDbUri), CosmosDbApiKey);


    [FunctionName(nameof(GetData))]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = "api/data/getdata/{city}{likes},{_pk}")]HttpRequest req,
        string city,
        string likes,
        string _pk,
        TraceWriter log)
    {

        IActionResult result;

        try
        {

            var Options = new RequestOptions() { PartitionKey = new PartitionKey(_pk) };
            var Sql = "SELECT * FROM c" WHERE c.name={name};

            var Uri = UriFactory.CreateDocumentCollectionUri("meddb", "medcol");
            var documentUri = DocumentClient.CreateDocumentQuery(Uri, Sql, Options);
            ResourceResponse<Document> document = await DocumentClient.ReadDocumentAsync(documentUri);


            result = new OkObjectResult(
                JsonConvert.SerializeObject(document.Resource, Formatting.Indented)
            );
        }
        catch (Exception e)
        {
            log.Error(e.Message, e);
            result = new BadRequestObjectResult(e);
        }

        return result;
    }
}
}
  `

Буду очень признателен за любую помощь!Где у меня возникли проблемы, это после раздела «Попробуйте».Или, если есть лучший способ сделать это, я тоже открыт!

Спасибо!

1 Ответ

0 голосов
/ 26 мая 2018

Стандартный способ подключения функций к Cosmos DB - это использование привязок Azure Cosmos DB .Инструкции по установке см. В этой статье.

Вы также можете получить экземпляр DocumentClient для выполнения пользовательских запросов.Несколько примеров использования привязки можно найти в рецептах функций: Привязки Cosmos DB (DocumentDB) (они для v1, поэтому все еще DocumentDB).

Ваш код будет выглядеть следующим образом:

[FunctionName(nameof(GetData))]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "api/data/getdata/{city}{likes},{_pk}")] HttpRequest req,
    [CosmosDB("test", "test", ConnectionStringSetting = "CosmosDB")] DocumentClient client, 
    string city,
    string likes,
    string _pk,
    TraceWriter log)

Реализация метода не должна отличаться, и она не является специфической для функций.

PS Вы не упомянули каких-либо особых проблем, но если у вас возникли проблемы при написании правильного запроса, задайте новый вопрос с уменьшенным образцом кода только с кодом Cosmos DB и точным изложением проблемы.

...