Javascript “如何定义”;“地图”;dynamo db中的AttributeType?
我是aws dynamo db的新手。我已经读到,我们可以在dynamo db()的模式中设置M类型的attributeValue 但当我执行下面的代码时Javascript “如何定义”;“地图”;dynamo db中的AttributeType?,javascript,node.js,amazon-web-services,amazon-dynamodb,Javascript,Node.js,Amazon Web Services,Amazon Dynamodb,我是aws dynamo db的新手。我已经读到,我们可以在dynamo db()的模式中设置M类型的attributeValue 但当我执行下面的代码时 var params = { TableName: 'product', KeySchema: [ { AttributeName: 'productType', KeyType: 'HASH' }, {
var params = {
TableName: 'product',
KeySchema: [
{
AttributeName: 'productType',
KeyType: 'HASH'
},
{
AttributeName: 'manufacturer',
KeyType: 'SORT'
}
],
AttributeDefinitions: [
{
AttributeName: 'productType',
AttributeType: 'S'
},
{
AttributeName: 'manufacturer',
AttributeType: 'M'
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1,
}
};
dynamodb.createTable(params, function(err, data) {
console.log(err, data);
});
它抛出错误{“消息”:“成员必须满足枚举值集:[B,N,S]”,“代码”:“ValidationException”,“时间”:“2018-02-07T11:20:12.930Z”,“状态代码”:400,“可重试”:false}
但是上面的链接说有一个Map类型的属性可用。有人能告诉我如何在dynamo db中实现Map吗。
提前谢谢 您应该查看属性定义,仅允许的值是B、N、S
您应该使用字符串来定义地图。要插入地图类型,您应该按照以下格式设置数据:
“M”:{“Name”:{“S”:“Joe”},“Age”:{“N”:“35”}
创建表时,只有两个属性是必需的,分区键和排序键(如果可用)。如果您打算使用制造商
键作为索引,请注意这是一个无效的操作,因为dynamodb只支持标量数据类型
tl;dr因此,在创建表时,您应该省略“非键/索引”属性,在您的情况下,该属性是
制造商
键 创建dynamodb表或向其添加索引时,只能定义索引的属性。换句话说,您只能定义用于分区键或排序键的属性。就像你在例子中所做的那样。但对键有效的属性类型只有S(字符串)、N(数字)和B(二进制)。映射不是分区键或排序键的有效属性类型,因此在定义表或索引时不能使用它们
DynamoDB没有模式。除了在表创建时为索引键定义的属性外,不定义任何其他属性。如果您想在表中添加地图,只需在放置或更新项目时插入地图即可。这基本上是DynamoDB的缺点,而不是MongoDB或couchbase。另一个NoSQL数据库可以让您拥有任何形状的文档,并索引任何属性,无论其深度如何。在DD中,您没有这种灵活性—可索引的顶级属性必须是标量。这是速度的权衡 我知道要插入数据,我必须以上面的格式(“M”:{“Name”:{“S”:“Joe”},“Age”:{“N”:“35”})写入对象,但在此之前,我必须创建表,并且在创建表时出错,这就是我的问题所在。同样,如果我像(“M”:{“Name”:{“S”:“Joe”},“Age”:{“N”:“35”})这样存储数据然后,在扫描了我以相同格式获得的表数据之后,如果我想获取“Joe”,那么我必须写“data.M.Name.S”,为什么我不能只保存像{Name:“Joe”,Age:“35”}这样的普通对象?在映射中定义一个属性作为索引怎么样?@Purefan-索引中只能有标量类型。