Как сохранить элемент в DynamoDB и сохранить поля CreatedAt и updatedAt? - PullRequest
0 голосов
/ 07 декабря 2018

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

Каждый раз, когда добавляется ответ, поле UpdatedAt обновляется с текущей отметкой времени.Это позволяет мне знать, когда был представлен последний ответ.Однако я также хочу знать , когда был отправлен первый ответ , и поэтому мне нужно также поле CreatedAt.Интересно, как это можно реализовать?

(я проверял ConditionalCheckExpression, но, похоже, это относится ко всей операции обновления. При этом мне нужно найти способ обновить CreatedAt только при первой вставке элемента).

    const now = new Date();
    let updateParams = {
        TableName: process.env.TABLE_RESULTS, 
        Key: {
            QuizId: '' + quiz_id,
            SessionId: '' + session_key,
        },
        UpdateExpression: `SET #QQ_ID = :answer, #updatedAt = :updatedAt`,
        ExpressionAttributeNames: {
            '#QQ_ID'   : `QQ_${question_id}`,
            '#updatedAt': 'UpdatedAt',
        },
        ExpressionAttributeValues: {
            ':answer': answer,
            ':updatedAt' : now.toISOString(), 
        }
    };

    let result = await doc.update(updateParams).promise();

1 Ответ

0 голосов
/ 10 декабря 2018

Просмотрите Документы AWS .

SET - добавляет один или несколько атрибутов и значений к элементу.Если какой-либо из этих атрибутов уже существует, они заменяются новыми значениями.Вы также можете использовать SET, чтобы добавить или вычесть из атрибута типа Number.Например: SET myNum = myNum +: val

SET поддерживает следующие функции:

  • if_not_exists (путь, операнд) - если элементне содержит атрибута по указанному пути, тогда if_not_exists оценивает операнд;в противном случае он оценивает путь.Вы можете использовать эту функцию, чтобы избежать перезаписи атрибута, который может уже присутствовать в элементе.

  • list_append (операнд, операнд) - вычисляет список с добавленным в него новым элементом.Вы можете добавить новый элемент в начало или конец списка, изменив порядок операндов в обратном порядке.

    // use if_not_exists()
    UpdateExpression: `SET #QQ_ID = :answer, #updatedAt = :updatedAt, #createdAt = if_not_exists(#createdAt, :createdAt)`,
    ExpressionAttributeNames: {
        '#QQ_ID'   : `QQ_${question_id}`,
        '#updatedAt': 'UpdatedAt',
        '#createdAt': 'CreatedAt',
    },
    ExpressionAttributeValues: {
        ':answer': answer,
        ':updatedAt' : now.toISOString(), 
        ':createdAt' : now.toISOString(), 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...