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

标签 amazon-dynamodb

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

我正在尝试编写一个通用脚本,该脚本能够对传递给它的任何表执行此操作。

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

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

最佳答案

  • 是的,听起来合理,不理想,但合理
  • 当然,总有更好的方法,但这是一种简单的方法,这是我作为本地 JS 文件运行的片段...


  • const AWS = require('aws-sdk');
    const dynamoDb = new AWS.DynamoDB.DocumentClient({
        region:'us-east-1'
    });
    
    async function main(event, context) {
        let tableContents;
        try{
            //get items from dynamo
            const params = {
                TableName: `${YOUR_TABLE_NAME}`,
            };
            tableContents = await scanDB(params);
        }catch(err){
            console.log(err);
            return err;
        }
        let calls = [];
        tableContents.forEach(function(value){
            let params = {
                ExpressionAttributeValues: {
                    ":newAttribute": false,
                },
                Key: {
                    "indexKey": value.indexKey
                },
                TableName: `${YOUR_TABLE_NAME}`,
                UpdateExpression: "SET newAttribute = :newAttribute",
                };
            calls.push(dynamoDb.update(params).promise());
        });
        let response;
        try{
            response = await Promise.all(calls);
        }catch(err){
            console.log(err);
        }
        return response;
    }
    async function scanDB(params) {
        let dynamoContents = [];
        let items;
        do{
            items =  await dynamoDb.scan(params).promise();
            items.Items.forEach((item) => dynamoContents.push(item));
            params.ExclusiveStartKey  = items.LastEvaluatedKey;
        }while(typeof items.LastEvaluatedKey != "undefined");
        return dynamoContents;
    };
    main();


    祝你好运!

    关于amazon-dynamodb - 为包含数百万个项目的 DynamoDB 表中的每个项目添加一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55363323/

    相关文章:

    aws-lambda - 如何在我的 lambda 代码中使用 AWS 自定义授权程序中生成的权限?

    java - 我可以列出 DynamoDB 表中包含这些值的所有项目吗?

    c# - 如何使用对象持久性模型在 C# 中动态更改 dynamodb 表名

    amazon-web-services - 为什么我的 DynamoDB 扫描速度如此之快,而且只有 1 个预配置的读取容量单位?

    java - Eclipse AWS Explorer 无法看到使用 Java 创建的 Dynamodb 表

    amazon-dynamodb - 如何在本地dynamoDB中使用aws-cli?

    amazon-web-services - 使用 If 条件在 dynamodb 提供中提供两个 GSI NonKeyAttributes 的云形成模板

    java - DynamoDB 对象集嵌套查询

    hashtable - dynamodb 表中的哈希范围有什么用?

    amazon-web-services - DynamoDB 物化图模式示例