Azure 预触发

问题描述 投票:0回答:1

我的目标是当我创建一个新项目时,触发器将年龄设置为 18 岁。

这是我的触发功能:

function trigger(item) {
    // Check if the document has an "age" field
    console.log("started triggering");
    if (item && item.age !== undefined) {
        // Update the "age" field to 18
        item.age = 18;
        console.log("done");
    }
    // Continue with the operation (insert)
    return item;
}

当我创建新项目时,年龄不会改变 输入:

{
      "id": "86",
      "name": "dhia",
      "age": 11
}

输出:

{
    "id": "86",
    "name": "dhia",
    "age": 11
}

我的目标是当我创建一个新项目时,触发器将年龄设置为 18 岁。

我尝试设置姓名、年龄,甚至是一个很小的更改来查看触发器是否有效,因为我正在学习,这是我有史以来的第一个预触发器。

Check image!

azure azure-cosmosdb azure-cosmosdb-sqlapi
1个回答
0
投票

我的目标是当我创建一个新项目时,触发器将年龄设置为 18 岁。

正如 Gaurav Mantri 在此 SO 线程中所解释的那样,只要插入文档,触发器就不会自动运行。您需要做的是指定创建文档时要运行的触发器。

以下是我遵循的步骤:

  • CosmosClient 利用包含 Azure Cosmos DB 帐户登录数据的连接字符串创建一个对象。

  • GetContainer
    函数用于获取对 Cosmos DB 帐户中特定容器的引用。

  • 具有属性 idnameage 的匿名类型用于定义对象。

  • 它生成一个

    ItemRequestOptions
    对象,并将该对象的
    PreTriggers
    属性设置为具有预触发名称 updateAge 的列表。此预触发将在创建项目之前执行。

  • 容器上的
  • CreateItemAsync
    方法用于异步创建项目。

  • item是新文档,null表示代码没有指定特定的分区键,requestOptions有预触发数据。

预触发:

function updateAge() {
  var context = getContext();
  var request = context.getRequest();
  var itemToCreate = request.getBody();
 
  itemToCreate.age = 18;

  request.setBody(itemToCreate);
}
  • 通过

    updateAge()
    检索请求上下文和要创建的对象。

  • 它修改项目的age属性,将其设置为18

  • 使用

    request.setBody(itemToCreate)
    使用修改后的 age 值更新项目的内容。

下面是我尝试过的代码:

public async Task CreateItemAsync()
{
    try
    {
        var client = new CosmosClient("*****");
        var container = client.GetContainer("newData", "newCont");

        var item = new
        {
            id = "3",
            name = "Pavan Balaji",
            age = 30
        };

        var requestOptions = new ItemRequestOptions
        {
            PreTriggers = new List<string> { "updateAge" }
        };

        var response = await container.CreateItemAsync(item, null, requestOptions);

        Console.WriteLine($"Request Charge: {response.RequestCharge}");
    }
    catch (CosmosException ex)
    {
        Console.WriteLine($"Cosmos DB Exception: {ex.Message}");
    }
}

static async Task Main(string[] args)
{
    ClassName Instance = new ClassName();
    await Instance.CreateItemAsync();
}

输出:

{
    "id": "3",
    "name": "Pavan Balaji",
    "age": 18
}
© www.soinside.com 2019 - 2024. All rights reserved.