我知道如何在以下类型的DynamoDB中插入项目
例如: { “ id”:“ 10021”, “ AppName”“ testingApp” }
但是我想插入对象数组,如下面的示例所示:
例如:
{
"testArray": [
{ "id" : "testID",
"applicationName" : "Myapp"
},
{
"id" : "testID1",
"applicationName" : "Myapp123"
} ]}
如果Dynamo数据库无法存储上述类型的JSON数据,那么您能建议哪种数据库更好地存储这种类型的输入吗??
答案 0 :(得分:0)
DynamoDB可以存储JSON数据,以及您希望插入的数据格式。
在插入DynamoDB以及将数据库数据检索到所需的JSON方法时,可以使用两种方法来格式化数据。
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/Converter.html
这些方法是:input
和output
。
我已经共享了两个AWS Lambda代码示例样本,希望能解决您的问题。
通过以下方式,您可以将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;
};
很乐意帮助
答案 1 :(得分:0)
尝试在列表属性内使用map属性
列表为您提供一个数组,而map为您提供键值对的对象