web-dev-qa-db-ja.com

dynamodbにjsonを挿入する方法

これが私のコードです。
asset_data jsonをasset_data列に挿入します。私はaws sdkを使用しています。 aws sdkがjsonをサポートするようになりました。 http://aws.Amazon.com/releasenotes/SDK/JavaScript/1691866671551861

var asset_data = {
    "name": "name" + i,
    "contentUrl": "http://www.hdwallpapersimages.com/nature-beauty-desktop-images/94892/",
    "size": 300,
    "headline": "headline",
    "description": "assetUrl reference for the creator",
    "encodingFormat": 'jpeg'
  };

  var params = {
    TableName: 'xyz',
    Item: { // a map of attribute name to AttributeValue
      "asset_id": {S: "asset" + i},
      "hit_id": {S: "0"},
      "created_date": {"S": Date.now().toString()},
      "status": {N: "0"},
      "operation": {S: "image_tagging"},
      "asset_data": {L: asset_data},
      "source": {S: "DAM"},
      "completed_date": {S: Date.now().toString()},
      "response_data": {S: "taged value"}
      // more attributes...
    },

    ReturnValues: 'NONE', // optional (NONE | ALL_OLD)
    ReturnConsumedCapacity: 'NONE', // optional (NONE | TOTAL | INDEXES)
    ReturnItemCollectionMetrics: 'NONE' // optional (NONE | SIZE)
  };

  db.putItem(params, function (err, data) {
    if (err) console.log(err); // an error occurred
    else console.log("inserted..."); // successful response
  });
10
mks

DynamoDBドキュメントクライアントSDKを使用できます。

http://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#put-property

ドキュメントクライアントは、属性値の概念を抽象化することで、Amazon DynamoDBのアイテムの操作を簡素化します。この抽象化は、入力パラメーターとして提供されるネイティブJavaScriptタイプに注釈を付けるとともに、注釈付き応答データをネイティブJavaScriptタイプに変換します。

あなたのケースのために、公式ドキュメントから抽出された以下の例でMapAttributeとして渡されているマップ属性値_(M)_を具体的に見てください。 Document Client APIは、JavascriptタイプとDynamoDBタイプの間の適切なマーシャリング/アンマーシャリングを処理します(つまり、非ドキュメントベースのSDKを使用するときに必要なため、Attribute Values (S,N,L,...)を指定する必要はありません)。

_var params = {
  TableName: 'Table',
  Item: {
     HashKey: 'haskey',
     NumAttribute: 1,
     BoolAttribute: true,
     ListAttribute: [1, 'two', false],
     MapAttribute: { foo: 'bar'},
     NullAttribute: null
  }
};

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

docClient.put(params, function(err, data) {
  if (err) console.log(err);
  else console.log(data);
});
_
22
bsd

DynamoDBは、JSONデータ、および挿入するデータ形式も保存できます。 DynamoDBに挿入するとき、およびDBデータを目的のJSONメソッドに取得するときにデータをフォーマットするために使用できる2つの方法があります。 https://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/Converter.html これらのメソッドは、inputおよびoutputです。

これを行うためにAWS lambdaコードの2つのサンプルスニペットを共有しました。これで問題が解決することを願っています。

次の方法で、JSONデータをDynamoDBがサポートする形式に変換してから挿入できます。

const AWS = require('aws-sdk');
//setting the region
AWS.config.update({region: 'ap-south-1'});

// Create the DynamoDB service object
const ddb = new AWS.DynamoDB.DocumentClient();


const getParams = (updatedTasks)=>{
const params = {
  TableName: 'todo-application',
  Key: {
    "userID" : "[email protected]",
  },
  UpdateExpression: "set tasks = :updatedTasks",
   ExpressionAttributeValues:{
        ":updatedTasks":updatedTasks
    },
    ReturnValues:"UPDATED_NEW"
};
return params;
}

const dbQuery =(newTask)=>{
    let updatedTask = AWS.DynamoDB.Converter.input(newTask, true);
    console.log('updated task formatted ',updatedTask);
 let params = getParams(updatedTask);
  return new Promise((resolve,reject) =>{
  ddb.update(params, function(err, data) {
  if (err) {
    console.log("Error", err);
    reject(err);
  } else {
    console.log("Success", data);
    resolve(data.Item)
  }
});
});
}


exports.updateTodoJobsOfAUser = async (event) => {
    const insertObject = [
    {
    statement:'learn Dynamo DB', id: 23
    },
    {
    statement:'Learn Serverless Architecture',id:24 
    }]
    const data = await dbQuery(insertObject);
    const response = {
        statusCode: 200,
        body: JSON.stringify(data)
    };
    return response;
};

次の方法で、DynamoDBデータをJSON形式に変換できます。

const dbQuery =()=>{
  return new Promise((resolve,reject) =>{
  ddb.get(params, function(err, data) {
  if (err) {
    console.log("Error", err);
    reject(err);
  } else {
    console.log("Success", data);
    resolve(data.Item)
  }
});
});
}


exports.getAllTodoJobsOfAUser = async (event) => {
    const data = await dbQuery();
    const formattedData =  AWS.DynamoDB.Converter.output(data, true);
    const response = {
        statusCode: 200,
        body: JSON.stringify(formattedData)
    };
    return response;
};

わたしにはできる。お力になれて、嬉しいです !! :)

3
Anand Ujjwal