NodeJS 键架构中的属性数必须与AWS DynamoDB中的属性定义中定义的属性数匹配?

plupiseo  于 2023-01-25  发布在  Node.js
关注(0)|答案(2)|浏览(117)

当从Node Js在dynamoDB中创建表时,我得到了上面的错误。

const schema = {
    TableName: "alarms",
    KeySchema: [
        { AttributeName: "alarm_code", KeyType: "HASH" },  //Partition key
        { AttributeName: "controller", KeyType: "RANGE" }  //Sort key
    ],
    AttributeDefinitions: [
        { AttributeName: "alarm_code", AttributeType: "N" },
        { AttributeName: "controller", AttributeType: "S" },
        { AttributeName: "controller_type", AttributeType: "S" }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 10,
        WriteCapacityUnits: 10
    }
}

{ AttributeName: "controller_type", AttributeType: "S" }
将此属性添加到AttributeDefinitions时出现上述错误

tyg4sfes

tyg4sfes1#

由于DynamoDB是无模式的,您只需要提供在创建时作为分区/排序键所需的属性,这就是参数命名为KeySchema的原因,因为它只与键相关:
阵列成员:最少1个项目。最多2个项目。

const schema = {
    TableName: "alarms",
    KeySchema: [
        { AttributeName: "alarm_code", KeyType: "HASH" },  //Partition key
        { AttributeName: "controller", KeyType: "RANGE" }  //Sort key
    ],
    AttributeDefinitions: [
        { AttributeName: "alarm_code", AttributeType: "N" },
        { AttributeName: "controller", AttributeType: "S" }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 10,
        WriteCapacityUnits: 10
    }
}
bgtovc5b

bgtovc5b2#

Amazon DynamoDB中表的键模式中的属性数必须与属性定义中定义的属性数匹配。
在DynamoDB中,键架构用于定义表的主键。主键由一个或多个属性组成,每个属性都在属性定义中定义。键架构必须包含与属性定义中定义的属性完全相同的属性集。这确保了在密钥模式中的属性和属性定义中定义的属性之间存在一对一的Map。
例如,如果表的主键被定义为由两个属性“Id”和“Timestamp”组成的复合键,则属性定义必须包括这两个属性,并且键架构必须以相同的顺序包括这两个属性。
注意DynamoDB表的主键必须是唯一的,不能为空,这一点很重要。

相关问题