19
votes

I'm new to javascript and node.js and was wondering if someone can help me figure out the syntax of putting a new item onto an existing table on AWS Dynamodb through their node.js SDK. Here's what I have so far. Is there an example for what I'm trying to do? If anyone could point me in the right direction, it'd be much appreciated.

var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
AWS.config.update({region: 'us-east-1'});
var dynamodb = new AWS.DynamoDB();

var item = {
    // I need to put the an item with a the primary key of "id", and an attribute called "item"
    // I'm new to js and node.js, so if somebody could help me understand the documentation
    // http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/frames.html#!http%3A//docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB_20120810.html
}

dynamodb.putItem({TableName: 'log_dev', Item: item}, function(err, data){
    if (err) {
    console.log(err); // an error occurred
    } else {
    console.log(data); // successful response
    }
});
4

4 Answers

31
votes
dynamoDB.putItem(
{
    "TableName": "Table1",
    "Item": {
        "Color": {"S": "white"},
        "Name": {"S": "fancy vase"},
        "Weight": {"N": "2"},
        "LastName":{"S": "Kumar"}
    }
}, function(result) {
    result.on('data', function(chunk) {
        console.log("" + chunk);
    });
});
console.log("Items are succesfully ingested in table .................."); 
5
votes

I expect your "id" to be numeric...

var item = {
    "id": {"N": 1234},
    "title": {"S": "Foobar"}
}

Note that with DynamoDB you specify the data type (N » numeric, S » string, B » binary) at table creation, only for the primary key (HashKey or HashKey+RangeKey). All other columns are allowed to vary in their data type, and can be seen as key-value pairs. So it is essential for DynamoDB to always encode the data type with the item attributes.

3
votes

I don't think muhqu's answer works, I believe the value of the attribute has to be a string.

var item = {
"id": {"N": "1234"},
"title": {"S": "Foobar"} }

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

0
votes

I would suggest using documentClient as it makes it easier to read and write data in dynamoDb. Also using conditional putItem will make sure the item is unique and doesn't overwrite existing item. "attribute_not_exists" checks if the userId in the example doesn't exist. If userId exists, it throws an error. Hope it's not too late :P

var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
AWS.config.update({region: 'us-east-1'});
var dynamodb = new AWS.DynamoDB.DocumentClient();

var item = {
"userId" : {"N":"12345678"},
"name":{"S":"Bob"}
}

var dbParam= {
TableName: tableName,
Item:item,
ConditionExpression: 'attribute_not_exists(#u) or #u = :userId',
ExpressionAttributeNames: { "#u" : "userId"}
}

dynamodb.putItem(dbParam, function(err,data) {
if(err){
console.log("err",err);
}
else{
console.log("data",data)
}
});