DynamoDB - putItem - 具有嵌套数据类型的Map(NodeJS,aws-sdk)

问题描述 投票:2回答:1

全部 - 我正在制定一项特定的业务要求,而且谷歌缺乏信息,我想我会在这里停下来获取一些信息:

我基本上是在提取CSV,将其转换为JSON对象并将其填充到Dynamo中。有趣的是,行值的数据类型在字符串和数字之间跳转,但我无法使其正常工作。

我正在使用Node和aws-sdk并逐字地使用亚马逊文档来测试这个并且它仍然不起作用,见下文:

var params = {
    TableName: foo,
    Item: {
        masterReportsUuid: uuidv4(),
        reportDate: _eventDate,
        "testAttribute": {
            "Name": {
                "S": "Joe"
            },
            "Age": {
                "N": "35"
            }
        },
    }
};



dbDocClient.put(params, (err, data) => {
    if (err) {
        //log to CloudWatch
        console.log(err);
        reject(err);
    } else {
        resolve(data);
    }
});

testAttribute显然是一个包含Name和Age,字符串和数字的Map。这直接来自文档 -

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#putItem-property

Map类型的属性。例如:

“M”:{“姓名”:{“S”:“Joe”},“年龄”:{“N”:“35”}}

但这在Dynamo中输出如下 -

Dynamo Output

所以我的问题是 - 为什么这不起作用?

编辑:错别字。

node.js amazon-dynamodb aws-sdk
1个回答
1
投票

呃 - 我解决了这个问题。如果有人碰到这个,我会留在这里。

两个问题 - 我正在使用DynamoDB.DoucmentClient()。放置API调用而不是DynamoDB.putItem调用AND我的params对象是关闭但不正确。请参阅下面的嵌套Map AttributeTypes的工作示例 -

const dbDocClient = new aws.DynamoDB.DocumentClient();
const dbDynamo = new aws.DynamoDB();

var params = {
    TableName: _ReportsTable,
    Item: {
        testUuid: {
            "S": uuidv4()
        },
        testDate: {
            "S": _eventDate
        },
        testAttribute: {
            "M": {
                "Name": {
                    "S": "Joe"
                },
                "Age": {
                    "N": "35"
                }
            }
        },
    }
};


dbDynamo.putItem(params, (err, data) => {
    if (err) {
        //log to CloudWatch
        console.log(err);
        reject(err);
    } else {
        resolve(data);
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.