Javascript DynamoDB重新映射查询上的列表属性项
是否有一种方法可以在查询过程中转换DynamoDB查询的输出(使用Lambda中的docclient)。具体来说,我希望提取列表的第一项并将其放入新属性中 作为一个简化示例,DynamoDB具有以下条目:Javascript DynamoDB重新映射查询上的列表属性项,javascript,amazon-web-services,amazon-dynamodb,Javascript,Amazon Web Services,Amazon Dynamodb,是否有一种方法可以在查询过程中转换DynamoDB查询的输出(使用Lambda中的docclient)。具体来说,我希望提取列表的第一项并将其放入新属性中 作为一个简化示例,DynamoDB具有以下条目: { “Id”:1 “项目”:[“项目1”、“项目2”、“项目3”] }, { “Id”:2, “项目”:[“项目-x”] }, { “Id”:3, //“项目”可能是可选的 } 并使用以下Lambda函数: // ... exports.handler = async (event, co
{
“Id”:1
“项目”:[“项目1”、“项目2”、“项目3”]
},
{
“Id”:2,
“项目”:[“项目-x”]
},
{
“Id”:3,
//“项目”可能是可选的
}
并使用以下Lambda函数:
// ...
exports.handler = async (event, context) => {
return dynamoDoc.query({
TableName : 'some-table',
Select : 'SPECIFIC_ATTRIBUTES',
KeyConditionExpression : 'Id = :id',
ExpressionAttributeValues : {
':id' : event.Id,
},
ProjectionExpression : `
Id,
Items[0]
`,
}).promise();
};
但是,这将返回一个列表,其中的项目如下所示:
“项目”:[
{
“Id”:1,
“项目”:[
“项目-1”
]
},
{
“Id”:2,
“项目”:[
“项目-x”
]
},
{
“Id”:3
}
]
是否有一种方法可以使用某种表达式重新映射属性名称,以便以以下形式获得数据输出:
项目:[
{
“Id”:1,
第一项:“第1项”
},
{
“Id”:2,
第一项:“第x项”
},
{
“Id”:3
}
]
我目前正在对数据使用Javascript的array.forEach,但是,我试图避免这种情况,而宁愿利用DynamoDB进行这种计算。没有办法
最佳做法是创建一个类似于存储库的助手函数
,助手函数将所有查询包装到Dynamodb,并为handler函数返回final
对象
快速修复,使用.map
而不是.forEach
exports.handler = async (event, context) => {
const result = await dynamoDoc.query({
TableName: 'some-table',
Select: 'SPECIFIC_ATTRIBUTES',
KeyConditionExpression: 'Id = :id',
ExpressionAttributeValues: {
':id': event.Id,
},
ProjectionExpression: `
Id,
Items[0]
`,
}).promise();
result.Items = result.Items.map((i) => {
return {
Id: i.Id,
FirstItem: i.Items && i.Items.length ? i.Items[0] : undefined,
}
});
return result; // final result
};
除非我弄错了,否则.forEach仍然会比.map好,因为它不会再次重新创建完整的结果结构(对象创建可以加在每毫秒的账单中)?不过,我想我会考虑做一个包装。