【问题标题】:How to get all DynamoDB attributes without typing all of them如何在不输入所有属性的情况下获取所有 DynamoDB 属性
【发布时间】:2019-08-22 00:30:06
【问题描述】:

我目前正在尝试根据 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,有没有办法返回所有的属性?

【问题讨论】:

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


    【解决方案1】:

    您不必指定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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2014-09-16
      相关资源
      最近更新 更多