Amazon dynamodb 如何在DynamoDB中插入项并维护CreatedAt和UpdatedAt字段?

Amazon dynamodb 如何在DynamoDB中插入项并维护CreatedAt和UpdatedAt字段?,amazon-dynamodb,Amazon Dynamodb,我正在尝试将一个网络测验的答案保存到DynamoDB表中。每次提交答案时,最终将调用下面的代码。对于3个答案,它将被调用3次 每次添加答案时,字段UpdatedAt都会用当前时间戳更新。这让我知道最后一次提交的答案是什么时候。但是我也想知道第一个答案是什么时候提交的,因此我还需要CreatedAt字段。我想知道这是如何实现的 (我正在检查ConditionalCheckExpression,但它似乎适用于整个更新操作。而我需要找到一种方法,仅在第一次插入项时更新CreatedAt) 进去看看 集

我正在尝试将一个网络测验的答案保存到DynamoDB表中。每次提交答案时,最终将调用下面的代码。对于3个答案,它将被调用3次

每次添加答案时,字段
UpdatedAt
都会用当前时间戳更新。这让我知道最后一次提交的答案是什么时候。但是我也想知道第一个答案是什么时候提交的,因此我还需要
CreatedAt
字段。我想知道这是如何实现的

(我正在检查
ConditionalCheckExpression
,但它似乎适用于整个更新操作。而我需要找到一种方法,仅在第一次插入项时更新
CreatedAt

进去看看

集合-向项目添加一个或多个属性和值。如果这些属性中的任何一个已经存在,它们将被新值替换。您还可以使用SET对Number类型的属性进行加法或减法运算。例如:设置myNum=myNum+:val

SET支持以下功能:

  • 如果不存在(路径,操作数)-如果项目在指定路径不包含属性,则如果不存在,则计算为操作数;否则,它将计算为路径。可以使用此函数避免覆盖项目中可能已存在的属性

  • list_append(操作数,操作数)-计算为添加新元素的列表。通过颠倒操作数的顺序,可以将新元素追加到列表的开头或结尾

谢谢那些“设置功能”很方便!错过的
如果不存在
是因为:a)思想
如果不存在
属性不存在
是相同的(它们不是:前者是“集合函数”,后者是“条件表达式函数”。b)我错误地认为只有条件表达式才能有函数(集合和条件表达式都可以有函数). :)
    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();
    // 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(), 
    }