Как я могу сохранить массив объектов в DynamoDB - PullRequest
0 голосов
/ 28 июня 2018

Я знаю, как вставить элементы в DynamoDB, когда он был в приведенном ниже типе

например: { "id": "10021", "AppName" "testingApp" }

Но я хочу вставить массив объектов, как в следующем примере:

например:

{
"testArray": [
{ "id" : "testID",
  "applicationName" : "Myapp"
},
 {
 "id" : "testID1",
  "applicationName" : "Myapp123"
} ]}

Если Dynamo DB не может хранить данные JSON выше указанного типа, то не могли бы вы порекомендовать, в какой DB лучше хранить этот тип ввода ..?

1 Ответ

0 голосов
/ 02 октября 2018

DynamoDB может хранить данные JSON, а также формат данных, который вы хотите вставить. Существует два метода, которые можно использовать для форматирования данных при вставке в DynamoDB, а также при извлечении данных из БД в нужный метод JSON. https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/Converter.html Эти методы: input и output.

Я поделился двумя примерами лямбда-кода AWS для этого, надеюсь, это решит вашу проблему.

Следующим способом вы можете преобразовать данные 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" : "anandujjwal13@gmail.com",
  },
  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;
};

Рад помочь

...