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