使用nodejs的DynamoDB条件更新

时间:2017-07-25 19:29:52

标签: node.js amazon-dynamodb updates aws-sdk

如何使用nodejs在dynamoDB中有条件更新项?如果存在,只需单独进行增量 - 它按预期工作。但我正在努力,当项目不存在时,需要添加它,然后下一次迭代做增量。得到此错误" 提供的表达式引用项目中不存在的属性 "。

function increment(data, cb) {
    const opt = {
        Key: {
            id: {S: id},
            dateKey: {S: data.dateVal}
        },
        ExpressionAttributeValues: {
            ':counter': {N: '' + 1},
            ':val1': {S: data.val1},
            ':val2': {S: data.val2}
        },
        UpdateExpression: 'SET counter=counter+:counter, val1=:val1, val2=:val2',ReturnValues: 'UPDATED_NEW',
        TableName:tableName
    };

    db.updateItem(opt, (err, data) => {
        if (err)
            return cb(err);

        const counter = getCounter(data.Attributes); //private method
        return cb(null, counter);
    });
}

1 个答案:

答案 0 :(得分:0)

如果要增加的项目不存在,则可以假定初始值是“零”,如下所示:

const opt = {
    Key: {
        id: {S: id},
        dateKey: {S: data.dateVal}
    },
    ExpressionAttributeValues: {
        ':counter': {N: '' + 1},
        ':val1': {S: data.val1},
        ':val2': {S: data.val2},
        ':zero': {N: 0}
    },
    UpdateExpression: 'SET counter=if_not_exists(counter, :zero)+:counter, val1=:val1, val2=:val2',ReturnValues: 'UPDATED_NEW',
    TableName:tableName
};