Таблица AWS Dynamo неправильно записывает данные для некоторых записей

#javascript #json #amazon-dynamodb

#javascript #json #amazon-dynamodb

Вопрос:

Я написал скрипт, который вызывает лямбда-функцию на AWS, эта лямбда-функция должна записывать записи в таблицу Dynamo.

Правильный формат, который записывается большую часть времени, это:


"yearOfBirth": "1973/01/01",
"yearsOfExperience": "5 or more years",
"zipCode": "60657"
Есть несколько, которые записываются следующим образом:


"yearOfBirth": {
"S": "1973/01/01"
},
"yearsOfExperience": {
"S": "5 or more years"
},
"zipCode": {
"S": "60657"
}

Что является причиной этого?

Редактировать:

Код, который я использую, который я передаю docClient.put()

 var profile = require('../model/userProfile.js');
var _ = require('lodash');

module.exports.save = function(userId, data, tableName, cb) {
  _(data).forIn(function(value, key) {
    var keyAttr = key;
    var valAttr = value;

    var params = {
      TableName: tableName,
      Key: {
        id: userId
      },
      UpdateExpression: 'SET #attrName = :attrValue',
      ExpressionAttributeNames: {
        '#attrName': keyAttr
      },
      ExpressionAttributeValues: {
        ':attrValue': valAttr
      }
    };

    profile.appendDataToUser(params, cb);
  });
};
  

profile.appendDataToUser просто выполняет вызов docClient.put()

Комментарии:

1. Нам нужен код вашей лямбда-функции

Ответ №1:

Пример кода будет полезен. Но я подозреваю, что вы можете использовать AWS.DynamoDB.DocumentClient для записи своих записей и одновременного указания типов полей. Если вы используете AWS.DynamoDB.DocumentClient , вам не нужно указывать типы полей, вы можете просто передать обычный объект javascript. Но если вы используете AWS.DynamoDB , вам нужно указать типы полей.

Использование AWS.DynamoDB

 var dynamodb = new AWS.DynamoDB();

dynamodb.putItem({
    TableName: 'user',
    Item: {
        "yearOfBirth": {
            "S": "1973/01/01"
        },
        "yearsOfExperience": {
            "S": "5 or more years"
        },
        "zipCode": {
            "S": "60657"
        }
    }
});
  

Использование AWS.DynamoDB.DocumentClient

 var dynamodb = new AWS.DynamoDB.DocumentClient();

dynamodb.put({
    TableName: 'user',
    Item: {
        "yearOfBirth": "1973/01/01",
        "yearsOfExperience": "5 or more years",
        "zipCode": "60657"
    }
});
  

Комментарии:

1. Это правильно, я использую AWS.DynamoDB.DocumentClient()

2. Также используя `docClient.put()’, я отредактирую исходное сообщение, чтобы включить код, который я использую для лямбда-выражения.