【发布时间】:2017-11-22 19:50:07
【问题描述】:
我想通过 node.js 更新 AWS DynamoDB 中的现有项目。我只有要更新的项目的二级索引值。我无法访问主索引...
Id: primary index
CallId: global secondary index
CallStatus: normal field
我想只使用 CallId(不使用密钥)来更新 CallStatus。
我尝试了不同的方法,例如:
- 扫描项目,然后使用获取的主键进行更新
- 通过 GSI 查询然后更新
- 有条件的更新
但是这些方法都不适合我。我假设,因为我没有正确使用它们。任何帮助表示赞赏:-)。
“扫描和更新”方法的代码示例:
var docClient = new aws.DynamoDB.DocumentClient();
var params = {
TableName: 'myTable',
FilterExpression: 'CallId = :c',
ExpressionAttributeValues: {
':c': callSid
}
};
docClient.scan(params, function (err, result) {
if (err) {
console.error("Unable to query item. Error JSON:", JSON.stringify(err));
} else {
console.log(result);
// Update call status
var params = {
TableName: "myTable",
Key: {
"Id": result.Items[0].Id
},
UpdateExpression: "set CallStatus = :s",
ExpressionAttributeValues: {
":s": callStatus
},
ReturnValues: "UPDATED_NEW"
};
docClient.update(params, function (err, data) {
if (err) {
console.error("Unable to update item. Error JSON:", JSON.stringify(err));
} else {
console.log("Update item succeeded:", JSON.stringify(data));
}
});
}
});
【问题讨论】:
-
您是否遇到任何错误? “键:主索引”是什么意思?分区键属性名称是“Key”还是“Id”?
-
@notionquest 遗憾的是没有错误消息,主键名为 Id,我在上面的问题中更改了它,