NodeJs 中的 DynamoDB putitem - 对象数组
DynamoDB putitem in NodeJs - arrays of objects
我正在尝试设置一个从 AWS Lambda 到 DynamoDB 的小型 api,但我无法确定是否以及如何将对象数组写入键中。
我有一个像
这样的对象
{
"teamName": "Team Awesome",
"members": [
{
"email": "person-1@example.com",
"name": "Bob"
},
{
"email": "person-2@example.com",
"name": "Alice"
}
]
}
成员数组给我带来了问题,在文档中看起来它可以考虑列表类型来完成,但是没有如何做的例子,我 运行尝试的方法。
那么完全可以用这种格式写东西吗?在那种情况下你是怎么做的?
示例代码 - 我在 ???
中放了什么
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB();
exports.handler = function(event, context) {
var tableName = "GDCCompetition";
var datetime = new Date().getTime().toString();
DynamoDB.putItem({
"TableName": tableName,
"Item": {
"datetime": {
"N": datetime
},
"teamName": {
"S": event.teamName
},
"members": ???
}
});
}
文档不是很明显,但是有一个叫做 DocClient
的东西,你可以将一个普通的 JS 对象传递给它,它会完成所有的解析和转换为 AWS 对象(具有所有类型).你可以这样使用它:
var AWS = require("aws-sdk");
var DynamoDB = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: "MyTable",
Item: {
"teamName": "Team Awesome",
"members": [
{
"email": "person-1@example.com",
"name": "Bob"
},
{
"email": "person-2@example.com",
"name": "Alice"
}
]
}
};
DynamoDB.put(params, function (err) {
if (err) {
return throw err;
}
//this is put
});
您可以先将对象转换为 DynamoDb 记录
const AWS = require('aws-sdk');
var tableName = "GDCCompetition";
var datetime = new Date().getTime().toString();
const members = [
{
"email": "person-1@example.com",
"name": "Bob"
},
{
"email": "person-2@example.com",
"name": "Alice"
}
];
const marshalled = AWS.DynamoDB.Converter.marshall({ members });
const params = {
"TableName": tableName,
"Item": {
"datetime": {
"N": datetime
},
"teamName": {
"S": event.teamName
},
"members": marshalled.members,
},
}
AWS.DynamoDB.putItem(params, function (err) {
if (err) {
return throw err;
}
});
我正在尝试设置一个从 AWS Lambda 到 DynamoDB 的小型 api,但我无法确定是否以及如何将对象数组写入键中。
我有一个像
这样的对象{
"teamName": "Team Awesome",
"members": [
{
"email": "person-1@example.com",
"name": "Bob"
},
{
"email": "person-2@example.com",
"name": "Alice"
}
]
}
成员数组给我带来了问题,在文档中看起来它可以考虑列表类型来完成,但是没有如何做的例子,我 运行尝试的方法。
那么完全可以用这种格式写东西吗?在那种情况下你是怎么做的?
示例代码 - 我在 ???
中放了什么var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB();
exports.handler = function(event, context) {
var tableName = "GDCCompetition";
var datetime = new Date().getTime().toString();
DynamoDB.putItem({
"TableName": tableName,
"Item": {
"datetime": {
"N": datetime
},
"teamName": {
"S": event.teamName
},
"members": ???
}
});
}
文档不是很明显,但是有一个叫做 DocClient
的东西,你可以将一个普通的 JS 对象传递给它,它会完成所有的解析和转换为 AWS 对象(具有所有类型).你可以这样使用它:
var AWS = require("aws-sdk");
var DynamoDB = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: "MyTable",
Item: {
"teamName": "Team Awesome",
"members": [
{
"email": "person-1@example.com",
"name": "Bob"
},
{
"email": "person-2@example.com",
"name": "Alice"
}
]
}
};
DynamoDB.put(params, function (err) {
if (err) {
return throw err;
}
//this is put
});
您可以先将对象转换为 DynamoDb 记录
const AWS = require('aws-sdk');
var tableName = "GDCCompetition";
var datetime = new Date().getTime().toString();
const members = [
{
"email": "person-1@example.com",
"name": "Bob"
},
{
"email": "person-2@example.com",
"name": "Alice"
}
];
const marshalled = AWS.DynamoDB.Converter.marshall({ members });
const params = {
"TableName": tableName,
"Item": {
"datetime": {
"N": datetime
},
"teamName": {
"S": event.teamName
},
"members": marshalled.members,
},
}
AWS.DynamoDB.putItem(params, function (err) {
if (err) {
return throw err;
}
});