DynamoDB - putItem - Карта с вложенными типами данных (NodeJS, aws-sdk) - PullRequest
3 голосов
/ 14 марта 2019

Все - я работаю над определенным бизнес-требованием, и в связи с отсутствием информации в Google я решил остановиться здесь на некоторой информации:

Я в основном принимаю CSV, преобразуя его в объект JSONи вбить его в динамо.Интересно, что типы данных значений строк перепрыгивают между строками и числами, но я не могу заставить это работать должным образом.

Я использую Node и aws-sdk и буквально использовал Документы Amazon дляпротестируйте это прямо, и это все еще не работало, см. ниже:

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 - это карта с именем и возрастом, строкой и номером.Это прямо из документации -

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

Атрибут типа Map.Например:

"M": {"Имя": {"S": "Джо"}, "Возраст": {"N": "35"}}

Но этовыводит, например, в «Динамо» -

Выход «Динамо»

Итак, мой вопрос - почему это не работает?

РЕДАКТИРОВАТЬ: Опечатки.

1 Ответ

1 голос
/ 14 марта 2019

Тьфу - я исправил проблему. Я оставлю это здесь на случай, если кто-нибудь столкнется с этим.

Две проблемы - я использовал вызов API DynamoDB.DoucmentClient (). Put, а не вызов DynamoDB.putItem И мой объект params был близок, но не корректен. Ниже приведен рабочий пример вложенных атрибутов карты 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);
    }
});
...