繁体   English   中英

使用节点 sdk 的复合主键更新 DynamoDB

[英]DynamoDB update with composite primary key with node sdk

我希望在 dynamoDB javascript SDK 中使用文档客户端的更新 function 部分。我的 dynamoDB 表有一个主分区键“PK”(字符串)和一个主排序键“SK”(字符串)。 我的理解是这意味着我的项目需要用它们的复合主键来标识,它是“PK”和“SK”的某种组合

我使用的是单表设计,因此示例项目看起来像

PK“比赛#2021”

SK:“邮政#5673”

作者:“用户#2759”

文本:“Lorem ipsum”

评论数:9

我的代码的逻辑是这样的

const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();

exports.addComment = async (event, context, callback) => {

const params = {
    TableName: 'App', 
    Key: {
        "PK": event.PK,
        "SK": event.SK
    },       
    UpdateExpression: 'set commentNumber = :number',
    ExpressionAttributeValues: {
        ':number': event.updatedCommentCount
    }
}

try {
    var res = await dynamo.update(params).promise()
    // handleSuccess(res)
} catch(err) {
    // handleFail(err)
}

return 'success'

};

当我尝试上面的代码时,我收到一条错误消息,指出the provided key element does not match the schema

我知道我的参数中的Key键有问题,但文档没有帮助。 它表明可以使用复合键进行更新,并且似乎表明Key的值可以是带有两个键的 object,但这不起作用。 如何更新我的参数以使用更新 function?

我相信您必须在属性名称前使用# ,如下所示: ...UpdateExpression: 'set #commentNumber =:number',...

所以我遇到了类似的问题并遇到了这个线程。 最终对我有用的是通过首先创建密钥 object 然后将其分配给 update_parameter 来设置 Key 属性。

var update_params = {
  TableName: 'App',
};

let key = {};
key.PK = event.PK;
key.SK = event.SK;

update_params.Key = key;

update_params.UpdateExpression = UpdateExpression;
update_params.ExpressionAttributeValues = ExpressionAttributeValues;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM