node.js:如何在创建表时在DynamoDB中添加非键属性?

时间:2017-08-08 04:27:21

标签: node.js amazon-dynamodb

我正在使用dynamoDB本地。我想创建一个包含6个属性的表,其中只有一个是key。我怎么做?在keySchema中指定键属性,在AttributeDefinitions中指定所有属性?

var params = {
    TableName : "Movies",
    KeySchema: [
        { AttributeName: "year", KeyType: "HASH"},  //Partition key
    ],
    AttributeDefinitions: [
        { AttributeName: "year", AttributeType: "N" },
        { AttributeName: "title", AttributeType: "S" }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 10,
        WriteCapacityUnits: 10
    }
};

dynamodb.createTable(params, function(err, data) {
    if (err) {
        console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
    }
});

2 个答案:

答案 0 :(得分:3)

您是否收到以下错误?

  

一个或多个参数值无效:属性数量   KeySchema与中定义的属性数量不完全匹配   AttributeDefinitions

这是因为您的AttributeDefinitions包含未在KeySchema中定义的属性。如果您只想使用HASH密钥,而不需要RANGE密钥,则可以从title中删除AttributeDefinitions属性。

DynamoDB是无模式的,因此您无需在AttributeDefinitions中包含任何非关键属性定义。您可以在表格中放置项目时添加任何其他属性(必须包含分区/排序键)。

以下代码将创建一个仅包含HASH (Partition) key的表格:

var dynamodb = new AWS_SDK.DynamoDB();

var params = {
    TableName : "MyNewTable",
    KeySchema: [
        { AttributeName: "year", KeyType: "HASH"},  //Partition key
        //{ AttributeName: "title", KeyType: "RANGE"},  //Sort key
    ],
    AttributeDefinitions: [
        { AttributeName: "year", AttributeType: "N" },
        // { AttributeName: "title", AttributeType: "S" }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 10,
        WriteCapacityUnits: 10
    }
};

dynamodb.createTable(params, function(err, data) {
    if (err) {
        console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
    }

有关详细信息,您可以参考createTable服务上的DynamoDB功能{/ 3}}。

希望这有帮助!

答案 1 :(得分:0)

简短答案:您不能。

创建表时不能添加非关键属性。您必须先创建表,然后使用dynamodb.putItem()dynamodb.batchWriteItem()添加非键属性。

示例:

var params = {
  TableName: 'Movies',
  Item: {
    'year': {N: '1994'},
    'title': {S: 'Pulp Fiction'},
    'description': {S: 'Two hitmen with a penchant for philosophical discussions.'},
  }
}

dynamodb.putItem(params, function(err, data) {
  if (err) {
    console.log("Error", err);
  } else {
    console.log("Success", data);
  }
});