如何在不键入所有DynamoDB属性的情况下获取所有DynamoDB属性

时间:2019-03-31 20:05:46

标签: javascript amazon-web-services aws-lambda amazon-dynamodb

我目前正在尝试基于Lambda中的主键返回条目的所有属性,但是我不想键入要获取的每个属性。有没有一种优化的方法来执行此操作,而不是逐一输入?

这是我的lambda函数:

exports.handler = async function(event, ctx, callback) {
  var data;
  var params = {
    Key: {
      key: event.key
    },
    TableName : 'app',
    AttributesToGet: [
      'email', 
      'lastName',
      'firstName',
      '...nextAttribute',
      '...nextAttribute'
    ],
  };

  try {
    data = await dynamoDb.get(params).promise()
    console.log(data);
  } 
  catch (err) {
    console.log(err);
  }
  return data.Item;
}

因此,在此示例中,有没有一种方法可以返回所有属性,而不是返回...nextAttribute

1 个答案:

答案 0 :(得分:4)

您不必指定AttributsToGet。如果您省略它,则默认情况下将获得所有属性,例如

exports.handler = async function(event, ctx, callback) {
  const params = {
    Key: {
      key: event.key
    },
    TableName : 'app',
  };

  try {
    const data = await dynamoDb.get(params).promise();
    console.log(data);
    return data.Item;
  } 
  catch (err) {
    console.log(err);
    return undefined;
  }
}

请参阅AWS JavaScript API中的详细信息,特别是DynamoDB的getItem()函数。


或者,您可能会发现DynamoDB DocumentClient很有趣。从get()文档中复制:

var params = {
  TableName : 'Table',
  Key: {
    HashKey: 'hashkey'
  }
};

var documentClient = new AWS.DynamoDB.DocumentClient();

documentClient.get(params, function(err, data) {
  if (err) console.log(err);
  else console.log(data);
});

附带说明,AttributesToGet是根据文档提供的旧参数。如果您改变主意并希望明确说明要获取的属性,请考虑改用ProjectionExpression