Javascript DynamoDB字符串数组模式

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模式。我在设置附加信息部件时遇到

我正在寻求帮助,了解如何将下面的模式实现到我的dynamodb数据库中

我的JSON示例

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()