Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript DynamoDB重新映射查询上的列表属性项_Javascript_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Javascript 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

是否有一种方法可以在查询过程中转换DynamoDB查询的输出(使用Lambda中的docclient)。具体来说,我希望提取列表的第一项并将其放入新属性中

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

{
“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好,因为它不会再次重新创建完整的结果结构(对象创建可以加在每毫秒的账单中)?不过,我想我会考虑做一个包装。