Amazon dynamodb 为包含数百万项的DynamoDB表中的每个项添加一个属性

Amazon dynamodb 为包含数百万项的DynamoDB表中的每个项添加一个属性,amazon-dynamodb,Amazon Dynamodb,我对AWS非常陌生,但我需要为DynamoDB表中的每个项目添加一个属性(并将值设置为某物) 我正在尝试编写一个通用脚本,它将能够对传入其中的任何表执行此操作 经过一点挖掘,看起来我应该能够做到这一点,只需扫描表,获取项目,然后更新每个项目 我的问题是: (1) 这似乎是一个合理的方法吗? (2) 是否有更简单/更好的方法自动执行此操作?(在表格范围内为表格中的每个项目添加属性?) 是的,听起来很合理,不是很理想,但很合理 当然,总有更好的方法,但这是一种简单的方法,下面是我作为本地JS文件运行

我对AWS非常陌生,但我需要为DynamoDB表中的每个项目添加一个属性(并将值设置为某物)

我正在尝试编写一个通用脚本,它将能够对传入其中的任何表执行此操作

经过一点挖掘,看起来我应该能够做到这一点,只需扫描表,获取项目,然后更新每个项目

我的问题是: (1) 这似乎是一个合理的方法吗? (2) 是否有更简单/更好的方法自动执行此操作?(在表格范围内为表格中的每个项目添加属性?)

  • 是的,听起来很合理,不是很理想,但很合理
  • 当然,总有更好的方法,但这是一种简单的方法,下面是我作为本地JS文件运行的一个片段
  • const AWS=require('AWS-sdk');
    const dynamoDb=新的AWS.dynamoDb.DocumentClient({
    地区:'us-east-1'
    });
    异步函数主(事件、上下文){
    让我们看看内容;
    试一试{
    //从dynamo获取物品
    常量参数={
    TableName:`${YOUR_TABLE_NAME}`,
    };
    tableContents=wait scanDB(参数);
    }捕捉(错误){
    控制台日志(err);
    返回错误;
    }
    让调用=[];
    tableContents.forEach(函数(值){
    设params={
    表达式属性值:{
    “:newAttribute”:false,
    },
    关键:{
    “索引键”:value.indexKey
    },
    TableName:`${YOUR_TABLE_NAME}`,
    UpdateExpression:“设置newAttribute=:newAttribute”,
    };
    calls.push(dynamoDb.update(params.promise());
    });
    让我们回应;
    试一试{
    响应=等待承诺。所有(呼叫);
    }捕捉(错误){
    控制台日志(err);
    }
    返回响应;
    }
    异步函数scanDB(params){
    让动态内容=[];
    让项目;
    做{
    items=等待dynamoDb.scan(params.promise();
    items.items.forEach((item)=>dynamoContents.push(item));
    params.ExclusiveStartKey=items.LastEvaluatedKey;
    }while(typeof items.LastEvaluatedKey!=“未定义”);
    返回动态内容;
    };
    
    main()没有更简单的方法,但是给定的方法也会有问题,比如应用程序是否也在尝试写入表?您可以做的另一件事是不必随时更新所有项,而是在请求时更新这些项。如果另一个应用程序在扫描和更新的同时尝试写入表,您是否知道默认行为是什么?第一个到达项目的会成功吗,但是第二个尝试进行更新的会失败吗?这真的很有帮助。谢谢