AWS Dynamo表对某些记录的写入数据不正确

时间:2016-10-18 21:09:40

标签: javascript json amazon-dynamodb

我编写了一个在AWS上调用lambda函数的脚本,这个lambda应该将记录写入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 个答案:

答案 0 :(得分:0)

示例代码很有用。但是,我怀疑您可能正在使用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"
    }
});