我的目标是当我创建一个新项目时,触发器将年龄设置为 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 岁。
我尝试设置姓名、年龄,甚至是一个很小的更改来查看触发器是否有效,因为我正在学习,这是我有史以来的第一个预触发器。
我的目标是当我创建一个新项目时,触发器将年龄设置为 18 岁。
正如 Gaurav Mantri 在此 SO 线程中所解释的那样,只要插入文档,触发器就不会自动运行。您需要做的是指定创建文档时要运行的触发器。
以下是我遵循的步骤:
CosmosClient 利用包含 Azure Cosmos DB 帐户登录数据的连接字符串创建一个对象。
GetContainer
函数用于获取对 Cosmos DB 帐户中特定容器的引用。
具有属性 id、name 和 age 的匿名类型用于定义对象。
它生成一个
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
}