Amazon dynamodb dynamodb updateItem为对象设置属性
我有一个表,它有一个属性,实际上是一个JSON列表Amazon dynamodb dynamodb updateItem为对象设置属性,amazon-dynamodb,Amazon Dynamodb,我有一个表,它有一个属性,实际上是一个JSON列表 var myItem = { name: 'myname', tasks: [ { key1: 'value1', key2: 'value2' } ] } 我像这样把我的物品放在桌子上,这似乎很好用 var params = { TableName: 'runs', Item: myItem }; dynamodbDoc.put( params, ... 然后我想更新记录以更改“任务”
var myItem = {
name: 'myname',
tasks: [
{ key1: 'value1', key2: 'value2' }
]
}
我像这样把我的物品放在桌子上,这似乎很好用
var params = {
TableName: 'runs',
Item: myItem
};
dynamodbDoc.put( params, ...
然后我想更新记录以更改“任务”
因此,我设置了如下更新项:
var params = {
TableName: 'runs',
Key: {
name: { S: 'myname' }
},
UpdateExpression: "SET #tasks = :tasks",
ExpressionAttributeNames: {
"#tasks": "tasks"
},
ExpressionAttributeValues: {
":tasks": newTasks
},
ReturnValues: 'ALL_NEW'
}
dynamodb.updateItem( params, ...
此操作失败,原因是提供了意外参数:在params.ExpressionAttributeValues[':tasks']
中找到了意外的键“0”
我也试过了
ExpressionAttributeValues: {
":tasks": { M: tasks }
},
而且
ExpressionAttributeValues: {
":tasks": { L: tasks }
},
这些也不起作用。显然,我在这里遗漏了一些内容。如果使用低级api调用,则需要将数据完全序列化为正确的dynamodb属性值,包括列表中嵌套的值
ExpressionAttributeValues: {
":tasks": {L:[
{M : {key1 : {S : "newvalue1"},
key2 : {S : "newvalue2"}
}
]}
}
正如您可以想象的那样,手工序列化这些数据会很快变得很累,我建议您考虑使用一个高级包装器,它会自动为您执行序列化。您使用的是javascript sdk吗?@zsimpson check。我需要更新数组中的特定JSON。有点像你的。我找不到合适的资源来做这件事。非常感谢你的提示!问题是我把不同的接口搞混了。当我切换到使用高级DocumentClient API update()函数而不是低级dynamoDB updateItem()函数时,所有这些都开始按预期工作。@ryan check。我需要更新数组中的特定JSON。有点像你的。我找不到合适的资源来做那件事。
ExpressionAttributeValues: {
":tasks": {L:[
{M : {key1 : {S : "newvalue1"},
key2 : {S : "newvalue2"}
}
]}
}