gpt4 book ai didi

javascript - DynamoDB 重新映射列表属性项查询

转载 作者:行者123 更新时间:2023-11-30 19:15:34 25 4
gpt4 key购买 nike

有没有办法在查询过程中转换 DynamoDB 查询的输出(在 Lambda 中使用 doc-client)。具体来说,我希望提取列表的第一项并将其放入新属性中。

作为简化示例,DynamoDB 具有以下条目:

{
"Id": 1
"Items": [ "item-1", "item-2", "item-3" ]
},
{
"Id": 2,
"Items": [ "item-x" ]
},
{
"Id": 3,
// "Items" is potentially optional
}

并使用以下 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();
};

然而,这会返回一个列表,其中包含如下所示的项目:

"Items": [
{
"Id": 1,
"Items": [
"item-1"
]
},
{
"Id": 2,
"Items": [
"item-x"
]
},
{
"Id": 3
}
]

有没有一种方法可以使用某种表达式重新映射属性名称,这样我就可以获得以下形式的数据输出:

Items: [
{
"Id": 1,
"FirstItem: "item-1"
},
{
"Id": 2,
"FirstItem: "item-x"
},
{
"Id": 3
}
]

我目前正在对数据使用 Javascript 的 array.forEach,但是,我试图避免这种情况,而宁愿利用 DynamoDB 进行这种计算。

最佳答案

没办法。

最佳实践是创建一个类似Repository 的辅助函数,辅助函数会将所有查询包装到 Dynamodb 并返回处理函数的 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
};

关于javascript - DynamoDB 重新映射列表属性项查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58043803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com