Javascript DynamoDB字符串数组模式
我正在寻求帮助,了解如何将下面的模式实现到我的dynamodb数据库中 我的JSON示例Javascript DynamoDB字符串数组模式,javascript,node.js,amazon-web-services,amazon-dynamodb,aws-sdk,Javascript,Node.js,Amazon Web Services,Amazon Dynamodb,Aws Sdk,我正在寻求帮助,了解如何将下面的模式实现到我的dynamodb数据库中 我的JSON示例 var users = [{ userId: 123, userName: "John Smith", additionalInfomation: [ ["favoriteColor", "blue"], ["hobbies", "ping-pong"] ] }] 这就是我迄今为止实现的userId和userName模式。我在设置附加信息部件时遇到
var users = [{
userId: 123,
userName: "John Smith",
additionalInfomation: [
["favoriteColor", "blue"],
["hobbies", "ping-pong"]
]
}]
这就是我迄今为止实现的userId
和userName
模式。我在设置附加信息
部件时遇到问题
const params = {
AttributeDefinitions: [
{
AttributeName: 'userId',
AttributeType: 'N'
},
{
AttributeName: 'userName',
AttributeType: 'S'
},
{
AttributeName: 'additionalInformation',
AttributeType: <NEED HELP HERE> // <-------------------- ?????
}
],
KeySchema: [
{
AttributeName: 'userId',
KeyType: 'HASH'
},
{
AttributeName: 'userName',
KeyType: 'RANGE'
},
{
AttributeName: 'additionalInformation',
KeyType: <NEED HELP HERE> // <-------------------- ?????
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1
},
TableName: 'USERS',
StreamSpecification: {
StreamEnabled: false
}
};
// Call DynamoDB to create the table
ddb.createTable(params, function(err, data) {
if (err) {
console.log('Error', err);
} else {
console.log('Table Created', data);
}
});
const参数={
属性定义:[
{
AttributeName:'userId',
属性类型:“N”
},
{
AttributeName:'用户名',
AttributeType:'S'
},
{
AttributeName:“附加信息”,
AttributeType://对于这个用例,我建议您选择userId
或userName
作为表的散列
键(也称为分区键),假设这两个属性中的任何一个都将唯一标识用户。范围
键(也称为排序键)当您在DynamoDB用户指南的段落中有多个与一个分区键、c.f.艺术家和歌曲标题相关联的项目时,这是非常有用的。因此,这意味着您只需要在属性定义
和键定义
中指定一个属性
此外,我建议您从模式中省略附加信息
,因为假设您既不会将该信息用作分区键,也不会将其用作排序键
相反,您可以在调用or时将它们作为两个单独的属性添加到各个项中(或者如果使用DynamoDB,则添加相应的and函数)
注意,在上面的示例中,我将favoriteColor
指定为S
,即一个字符串,但cabiods
指定为SS
意味着它是一个字符串数组。这可能是您想要的,也可能不是您想要的,但因为属性名称是“cabiods”(而不是“habiody”),我认为允许不止一个是有意义的。我感谢您对哈希和范围键的了解。但我之所以需要它作为[[“键”、“值”]、[“键”、“值”]]的一种类型,是有原因的
。您能更新您的答案以适应该用例吗?每个嵌套数组的大小始终为两个,并且两个都是字符串。空字符串可以。这在AIK上是不受支持的。也许您可以通过使用字符串数组来实现一种变通方法,然后手动拆分,例如类似于“AdditionalInformation”:{SS:[“key#value”,“key#value”]}
没关系,我解决了它。其他信息:{L:[{SS:[”“,”“]},{SS:[”“,”“]}
我想更正一下,我忽略了L
(列表)和M
(地图)(另见DynamoDB)谢谢。这帮了大忙!我希望aws文档有更多的例子
const params = {
Item: {
"userId": {
N: "123"
},
"userName": {
S: "dummy"
},
"favoriteColor": {
S: "blue"
},
"hobbies": {
SS: ["ping-pong", "another hobby"]
}
},
TableName: "USERS"
};
const putItemPromise = dynamodb.putItem(params).promise()