我正在根据文档使用这些参数在 DynamoDB 中创建一个表和 GSI:
configId
是表的主键,我使用 publisherId
作为 GSI 的主键。 (为简洁起见,我删除了一些不必要的配置参数)
var params = {
TableName: 'Configs',
KeySchema: [
{
AttributeName: 'configId',
KeyType: 'HASH',
}
],
AttributeDefinitions: [
{
AttributeName: 'configId',
AttributeType: 'S',
},
{
AttributeName: 'publisherId',
AttributeType: 'S',
}
],
GlobalSecondaryIndexes: [
{
IndexName: 'publisher_index',
KeySchema: [
{
AttributeName: 'publisherId',
KeyType: 'HASH',
}
]
}
]
};
我正在使用这个查询这个表:
{ TableName: 'Configs',
IndexName: 'publisher_index',
KeyConditionExpression: 'publisherId = :pub_id',
ExpressionAttributeValues: { ':pub_id': { S: '700' } } }
但我不断收到错误:
"ValidationException: One or more parameter values were invalid: Condition parameter type does not match schema type"
在文档中,它指定主要 KeyType
可以是 HASH
或 RANGE
,并且您设置了 AttributeType
在 AttributeDefinitions
字段中。我将 publisherId
作为 String
发送,不确定我在这里缺少什么。
问题是我创建表的方式,还是我查询的方式? 谢谢
最佳答案
尝试从这里更改 ExpressionAttributeValues
{
TableName: 'Configs',
IndexName: 'publisher_index',
KeyConditionExpression: 'publisherId = :pub_id',
ExpressionAttributeValues: { ':pub_id': { S: '700' } }
}
到
{
TableName: 'Configs',
IndexName: 'publisher_index',
KeyConditionExpression: 'publisherId = :pub_id',
ExpressionAttributeValues: { ':pub_id': '700'}
}
从 { ':pub_id': { S: '700' } }
到 { ':pub_id': '700'}
。
我遇到了同样的问题,为此我花了 2 天时间。官方文档中的误导。
关于node.js - 在 dynamodb Local 中查询全局二级索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33847477/