Как сохранить массив объектов в DynamoDB

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

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

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

например:

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

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

Вы пробовали List attribute?

Renato Byrro 30.06.2018 01:45

Как я могу создать таблицу, которая может хранить данные в указанном выше формате JSON на консоли AWS

Dee 13.07.2018 16:07

На консоли AWS вам просто нужно открыть таблицу, нажать «Создать элемент» и просто скопировать / вставить или ввести туда объект JSON.

Renato Byrro 13.07.2018 16:19

Да, я пробовал то же самое, но я не вижу, чтобы он сохранил значения, ожидаемые от него (это формат в вопросе)

Dee 16.07.2018 15:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
12 043
2

Ответы 2

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" : "[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.info('updated task formatted ',updatedTask);
 let params = getParams(updatedTask);
  return new Promise((resolve,reject) =>{
  ddb.update(params, function(err, data) {
  if (err) {
    console.info("Error", err);
    reject(err);
  } else {
    console.info("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.info("Error", err);
    reject(err);
  } else {
    console.info("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;
};

Рад помочь

попробуйте использовать атрибут карты внутри атрибута списка

list дает вам массив, а map дает вам объект пар ключ-значение

Пример поможет ОП понять, что вы имеете в виду.

Markus 09.09.2020 09:59

Другие вопросы по теме