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

AWS Dynamo table writing data incorrectly for some records

本文关键字:数据 不正确 记录 Dynamo AWS      更新时间:2023-09-26

我编写了一个脚本,调用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);
  });
};

概要文件。appendDataToUser只是调用docClient.put()

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