【发布时间】:2018-01-11 16:58:52
【问题描述】:
考虑 DynamoDB 表中的以下文档项/语法:
{
"id": "0f00b15e-83ee-4340-99ea-6cb890830d96",
"name": "region-1",
"controllers": [
{
"id": "93014cf0-bb05-4fbb-9466-d56ff51b1d22",
"routes": [
{
"direction": "N",
"cars": 0,
"sensors": [
{
"id": "e82c45a3-d356-41e4-977e-f7ec947aad46",
"light": true,
},
{
"id": "78a6883e-1ced-4727-9c94-2154e0eb6139",
}
]
}
]
}
]
}
我的目标是更新此 JSON 表示中的单个属性,在本例中为 cars。
我的方法
我知道所有传感器的 ID。因此,获得该属性的最简单方法是在数组中找到具有任何 id 的传感器的路线。找到该传感器后,Dynamo 应该知道他必须更新路由数组中的哪个对象。但是,如果我的条件被拒绝,我将无法运行此代码。
在这种情况下,更新属性汽车,其中路线有一个 ID 为 e82c45a3-d356-41e4-977e-f7ec947aad46 或 78a6883e-1ced-4727-9c94-2154e0eb6139 的传感器。
var params = {
TableName: table,
Key:{
"id": "0f00b15e-83ee-4340-99ea-6cb890830d96",
"name": "region-1"
},
UpdateExpression: "set controllers.intersections.routes.cars = :c",
ConditionExpression: ""controllers.intersections.routes.sensors.id = :s",
ExpressionAttributeValues:{
":c": 1,
":s": "e82c45a3-d356-41e4-977e-f7ec947aad46"
},
ReturnValues:"UPDATED_NEW"
};
docClient.update(params, ...);
我怎样才能做到这一点?
【问题讨论】:
标签: amazon-dynamodb