有没有更简洁的方法来编写 DynamoDB 更新参数?
Is there a less verbose way to write DynamoDB update params?
我是 Dynamo 的新手,我使用无服务器框架和 TypeScript 创建了一个 simple todo API
要更新项目,我必须做这个巨大的 params
const
const params = {
TableName: process.env.DYNAMO_TABLE_TODO,
Key: {
id: event.pathParameters.id,
},
ExpressionAttributeNames: {
"#todo_text": "text",
},
ExpressionAttributeValues: {
":text": data.text,
":checked": data.checked,
":updatedAt": timestamp,
},
UpdateExpression: "SET #todo_text = :text, checked = :checked, updatedAt = :updatedAt",
ReturnValues: "ALL_NEW",
}
// update the todo in the database
dynamoDb.update(params, (error, result) => {
if (error) throw error
callback(null, {
statusCode: 200,
headers: { "Content-Type": "application/json" },
body: JSON.stringify(result.Attributes),
})
})
有没有更简洁的方法来做到这一点?使用 Mongoose 我会简单地做
Model.findOneAndUpdate({{ _id: id }, {
text: data.text,
checked: data.checked,
updatedAt: timestamp
})
这不仅仅是关于代码是否丑陋,如果我想将 属性 A2 写入数据库,只有当 A1 存在于 Mongoose 中时,我可以从第二个中删除 属性对象,而在 Dynamo 中我将不得不编写不同的 ExpressionAttributeValues
和 UpdateExpression
添加更多我或其他开发人员出错的概率
由于您指的是抽象的 Mongoose,因此通过提供类似的抽象来回答问题才公平。
有一个受 mongoose 启发的建模工具,它应该可以满足您的要求。
https://github.com/dynamoose/dynamoose
这将允许您执行以下操作:
await User.update({"id": 1, "name": "Bob"}); // This code will set `name` to Bob for the user where `id` = 1
来自 https://dynamoosejs.com/guide/Model#modelupdatekey-updateobj-settings-callback
我是 Dynamo 的新手,我使用无服务器框架和 TypeScript 创建了一个 simple todo API
要更新项目,我必须做这个巨大的 params
const
const params = {
TableName: process.env.DYNAMO_TABLE_TODO,
Key: {
id: event.pathParameters.id,
},
ExpressionAttributeNames: {
"#todo_text": "text",
},
ExpressionAttributeValues: {
":text": data.text,
":checked": data.checked,
":updatedAt": timestamp,
},
UpdateExpression: "SET #todo_text = :text, checked = :checked, updatedAt = :updatedAt",
ReturnValues: "ALL_NEW",
}
// update the todo in the database
dynamoDb.update(params, (error, result) => {
if (error) throw error
callback(null, {
statusCode: 200,
headers: { "Content-Type": "application/json" },
body: JSON.stringify(result.Attributes),
})
})
有没有更简洁的方法来做到这一点?使用 Mongoose 我会简单地做
Model.findOneAndUpdate({{ _id: id }, {
text: data.text,
checked: data.checked,
updatedAt: timestamp
})
这不仅仅是关于代码是否丑陋,如果我想将 属性 A2 写入数据库,只有当 A1 存在于 Mongoose 中时,我可以从第二个中删除 属性对象,而在 Dynamo 中我将不得不编写不同的 ExpressionAttributeValues
和 UpdateExpression
添加更多我或其他开发人员出错的概率
由于您指的是抽象的 Mongoose,因此通过提供类似的抽象来回答问题才公平。
有一个受 mongoose 启发的建模工具,它应该可以满足您的要求。 https://github.com/dynamoose/dynamoose
这将允许您执行以下操作:
await User.update({"id": 1, "name": "Bob"}); // This code will set `name` to Bob for the user where `id` = 1
来自 https://dynamoosejs.com/guide/Model#modelupdatekey-updateobj-settings-callback