Один из обязательных ключей не имеет значения - AWS - PullRequest
0 голосов
/ 03 марта 2019

Я новичок в DynamoDB, и я пытался спроектировать таблицу и сделать некоторые доказательства концепции.Ниже приведена таблица, которую я создал с помощью локального вторичного индекса

var params = {
        TableName : "sample",
        KeySchema: [
            { AttributeName: "user_id", KeyType: "HASH"},
            { AttributeName: "created_date", KeyType: "RANGE"}
        ],
        AttributeDefinitions: [
            { AttributeName: "user_id", AttributeType: "S" },
            { AttributeName: "created_date", AttributeType: "S" },
            { AttributeName: "video_id", AttributeType: "S" }

        ],
        ProvisionedThroughput: {
            ReadCapacityUnits: 5,
            WriteCapacityUnits: 5
        },
        LocalSecondaryIndexes: [{
                IndexName: "user_id-video_id-Index",
                KeySchema: [
                    {
                        AttributeName: "user_id",
                        KeyType: "HASH"
                    },
                    {
                        AttributeName: "video_id",
                        KeyType: "RANGE"
                    }
                ],
                Projection: {
                    ProjectionType: "ALL"
                }
            }]

И после этого я вставил два элемента, как показано ниже

Элемент 1:

{
    "company": "comapnyname",
    "created_date": "02-28-2019",
    "email": "randomguy@abc.com",
    "first_name": "John",
    "last_name": "Doe",
    "profile_pic": "https://s3location",
    "user_id": "vshdhfb"
  }

Элемент 2:

{
                "author": "Phil DiMaggio",
                "created_date": "02-29-2018",
                "description": "This video further introduces the Business Sales compensation plans.",
                "likes": "12",
                "title": "Understanding Business Sales Compensation Plans",
                "user_id": "vshdhfb",
                "video_id": "vdhk23so9",
                "video_loc": "https://s3.amazonaws.com/videos/video.mp4",
                "views": "45"
              }

И затем я пытаюсь обновить / удалить второй элемент с кодом ниже, и он выдает мне сообщение «message»: «Один из необходимых ключей не имеет значения»

var params = {
        TableName: "sample",

        Key:{
            "video_id": "vdhk23so9",
            "user_id":"vshdhfb"
        },
        UpdateExpression: "set likes = likes + :val",
        ExpressionAttributeValues:{
        ":val":1
        },
        ReturnValues:"UPDATED_NEW"
    };

    docClient.update(params, function(err, data) {
        if (err) {
            document.getElementById('textarea').innerHTML = "Unable to update like: " + "\n" + JSON.stringify(err, undefined, 2);
        } else {
            document.getElementById('textarea').innerHTML = "Like video succeeded: " + "\n" + JSON.stringify(data, undefined, 2);
        }
    });
} 

Нужно ли добавить еще один ключ?Чего мне не хватает?

1 Ответ

0 голосов
/ 03 марта 2019

Ваш третий кодовый блок не предоставляет значение для create_date.Это поле определено как часть ключа:

    TableName : "sample",
    KeySchema: [
        { AttributeName: "user_id", KeyType: "HASH"},
        { AttributeName: "created_date", KeyType: "RANGE"}

Необходимо указать user_id и created_date для однозначной идентификации записи.

О, и, вероятно, это не вызываетпроблема, но это недопустимая дата, поскольку 2018 год не является високосным годом:

"created_date": "02-29-2018",

Дата хранится в виде строки, поэтому это не приведет к ошибке, но вы также можете рассмотреть вопрос о сохранении дат вболее полезный формат, такой как YYYY-MM-DD, который упрощает сортировку и позволяет избежать путаницы с форматированием даты в США (например, это 01-02-2019 1 февраля или 2 января?).

...