如何在DynamoDB中更新项目并维护CreatedAt和UpdatedAt字段?

时间:2018-12-07 09:09:38

标签: amazon-dynamodb

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

添加了每个时间答案,使用当前时间戳更新了字段Em$lwage = plm::lag(Em$wage)。这使我知道何时提交了最后答案。但是,我也想知道何时提交第一个答案,因此我也需要UpdatedAt字段。我不知道如何实施?

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

CreatedAt

1 个答案:

答案 0 :(得分:1)

AWS docs中查看。

  

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(), 
    }