Как удалить элемент из списка DynamoDB в AWS Lambda? - PullRequest
0 голосов
/ 30 апреля 2018

вот изображение данных в DynamodB

Я хочу удалить элемент из favRest, и мне нужно будет указать только значение, и это должно быть сделано, вот моя лямбда-функция

var AWS = require('aws-sdk');

const docClient = new AWS.DynamoDB.DocumentClient({ region: 'us-east-1' });

exports.handler = (event, context, callback) => {
    const params = {
        TableName : 'User',
        Key:{
            "id": event.user_id,
        },
        UpdateExpression: "DELETE favRest :p",
        ExpressionAttributeValues: {
            ':p': event.place_id
        },
        ReturnValues: "ALL_NEW" 
    }

    // TODO: Implementation...

    docClient.update(params, (err, data) => {
        if (err) {
            console.log("Unable to update item. Error: " + err.message);
            callback(err);
        } else {
            console.log("UpdateItem succeeded.");
            callback(null, data);
        }
    });
};

Однако, это дает мне следующую ошибку:

"{\n  \"message\": \"Invalid UpdateExpression: Incorrect operand type for operator or function; operator: DELETE, operand type: STRING\",\n  \"code\": \"ValidationException\",\n  \"time\": \"2018-04-29T18:49:58.628Z\",\n  \"requestId\": \"7TDRI4TOF9S71OUJDEKMIOA40RVV4KQNSO5AEMVJF66Q9ASUAAJG\",\n  \"statusCode\": 400,\n  \"retryable\": false,\n  \"retryDelay\": 35.34160854636804\n}"

что я должен сделать

1 Ответ

0 голосов
/ 30 апреля 2018

Действие DELETE поддерживает только типы данных Set. Ваш favRest тип атрибута List.

Если вы хотите сохранить тип атрибута favRest как List, вы можете использовать REMOVE для удаления отдельных элементов из списка (с учетом индекса элемента):

UpdateExpression: "REMOVE favRest[:index]"

или вы можете использовать SET, чтобы заменить весь список новыми значениями:

UpdateExpression: "SET favRest = :newList"

В противном случае вы можете изменить тип атрибута favRest на Set.

См. Обновление выражений .

...