当前位置: 首页 > 知识库问答 >
问题:

使用Azure函数删除CosmosDB条目

汝和裕
2023-03-14

我一直在寻找一种技术,使用浏览器中的代码编辑器,使用Azure函数删除Cosmos数据库中的项目。我不想在VS上使用本地开发的代码,原因有很多。

这里提供了我使用的代码,我使用的是带有CosmosDB输入和输出绑定的HttpTrigger。它们的名称非常明显(inputDocument,outputDocument)。

这段代码在从db读取项目和编写新文档方面工作得非常好,但是我希望能够删除单个项目。我正在制作一个游戏“拍卖行”系统,要“购买”一件物品,我需要将其从数据库中删除。

我现在已经搜索了相当多的地方,很多人说使用DocumentDB,但我认为浏览器编辑器不支持这个,我无法让它识别正确的Azure库来使用它。如果我错过了一个步骤,请让我知道。当我添加时它失败了

#r "Microsoft.Azure.Documents.Client"
using Microsoft.Azure.Documents.Client;

与Azure支持人员交谈后,我发现v3使用文档。核心,而不是文档。客户如果有人可以提供文档的文档。我会很感激的!

谢谢下面复制的代码;

    #r "Newtonsoft.Json"

    using System.Net;
    using System.Linq;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Primitives;
    using Newtonsoft.Json;

    public class AuctionItem
    {
        [JsonProperty("itemID")]
        public string itemID { get; set; }
    
        [JsonProperty("price")]
        public string Price { get; set; }
    
        [JsonProperty("amount")]
        public string Amount { get; set; }
    }

    public static IActionResult Run(HttpRequest req, out object outputDocument, 
    IEnumerable<AuctionItem> inputDocument, ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];
        string price = req.Query["price"];
        string amount = req.Query["amount"];

        string command = req.Query["command"];

        outputDocument = null;

        if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(price) && !string.IsNullOrEmpty(amount)) 
        {
            string responseMessage = "{\"Message\":\"Success\",\n\"Data\": [" + "\n";
               
            if (!string.IsNullOrEmpty(command)) {
                if (command == "1") {
                    foreach (var item in inputDocument) {
                        responseMessage += "{\n\t\"itemID\":\"" + item.itemID + "\"," + "\n";
                        responseMessage += "\t\"price\":\"" + item.Price + "\"," + "\n";
                        responseMessage += "\t\"amount\":\"" + item.Amount + "\"}," + "\n";
                    }
                } else if (command == "2") {
                    var item = inputDocument.Where(x => x.itemID == name).FirstOrDefault();
                    if (item != null) {
                        inputDocument = inputDocument.Where(x => x != item);
                    }
                } else if (command == "3") {
                    responseMessage += "{\n\t\"itemID\":\"" + name + "\",\n";
                    responseMessage += "\t\"price\":\"" + price + "\",\n";
                    responseMessage += "\t\"amount\":\"" + amount + "\"}\n";
                

                    log.LogInformation(responseMessage);
                    outputDocument = new {
                        itemID = name,
                        price = price,
                        amount = amount
                    };
                }
            }
        
            responseMessage += "]}";
            return new OkObjectResult(responseMessage);
        } else {
            outputDocument = null;
            return new BadRequestResult();
        }
            
    }

共有1个答案

韦胜泫
2023-03-14

您需要在http触发器中创建一个名为“function.proj”的文件

内容:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netcoreapp3.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.Azure.DocumentDB.Core" Version="2.12.0" />
    </ItemGroup>
</Project>

创建步骤:

下面是我的测试代码,它可以正常工作:

#r "Newtonsoft.Json"
#r "Microsoft.Azure.DocumentDB.Core"

using System.Net;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using System;
using System.Threading.Tasks;

private static DocumentClient client;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    client = new DocumentClient(new Uri("endpointUrl"), "authorizationKey");
    ResourceResponse<Document> response = await client.DeleteDocumentAsync(
        UriFactory.CreateDocumentUri("databaseName", "collectionName", "id"),
        new RequestOptions { PartitionKey = new PartitionKey("partition-key-value") });

    log.LogInformation("Request charge of delete operation: {0}", response.RequestCharge);
    log.LogInformation("StatusCode of operation: {0}", response.StatusCode);


    return new OkResult();    
}

顺便说一下,你可以在这里找到文档。

 类似资料:
  • 我正在创建一个Azure函数,当图像上传到或添加到特定Azure存储时触发该函数,它执行以下操作: 1.)调整图像大小2.)将图像放入正确的目录(使用输出绑定)3.)删除处理后添加到Azure存储的原始blob图像。 我已经完成了过程中的步骤1和2,但我发现很少甚至没有关于删除blob或API的文档,这些文档将公开Azure存储的方法。(使用C#) 以下是示例代码:

  • 下面是我的function.json 有什么想法可以摆脱这个“exception:attributeError:module'azure.functions'没有属性'in'”错误吗?

  • 我知道如何使用Azure云函数在我的CosmosDB实例中创建、读取和更新文档,但仍然不知道如何实现删除。我用作参考的主要文档是https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-cosmos-db-triggered-function. 我尝试使用没有id的输入和输出绑定(从而获取整个集合),然后过滤要从

  • 我在Azure cosmosDB中有一个集合,我在其中启用了无默认值的生存时间(TTL)功能。 根据我将在此问题中提到的文档,一切似乎都非常清楚,但仍然缺少一些东西,因为5天后我仍然可以看到TTL为300秒的文档。 符合文件要求: Azure Cosmos DB将在这段时间后自动删除这些项目,因为它们是最后一次修改的。生存时间值以秒为单位进行配置。当您配置TTL时,系统将根据TTL值自动删除过期的

  • 我正在尝试创建一个 Azure 函数(在 Python 中实现)以删除 CosmosDB 容器中的项。使用 Azure Cosmos DB Input 以下代码是我目前用于进行简单更新的代码。 _init_. py文件 function.json 了解可以使用输入绑定的 sqlQuery 配置属性来指定 delete 语句(甚至不太确定这是否是一种好的做法..),但只是想知道是否有其他删除方法可用