在dynamodb Local查询全球二级指数

我正在使用这些参数在发电机中创build一个表格和GSI,如下所示:

configId是表的主键,我使用publisherId作为GSI的主键(为了简洁,我删除了一些不必要的configuration参数)

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:一个或多个参数值无效:条件参数types不匹配架构types”

在文档中,它指定主KeyType可以是HASH或RANGE,并且您可以在attributeDefinitions字段中设置attributeType。 我发送publisherId作为string,不知道我在这里失踪。

问题是以我创build表的方式还是我正在查询的方式进行的? 谢谢

试着改变这一点

 { 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天的时间。 误导性的官方文件。

如上所述,如果要删除types转换,则需要使用DynamoDB Document Client。

 var docClient = new AWS.DynamoDB.DocumentClient(); 

…那么你可以使用上面列出的对象符号来调用API。

 { ':pub_id': '700'} 

这个问题我自己也想过了,我在一些地方使用了DynamoDB(),而在其他地方使用的是docClient,但是一段时间都找不到它,但是这样可以解决这个问题。

发现这取决于您是使用AWS.DynamoDB还是AWS.DynamoDB.DocumentClient

检查文档中的差异: AWS.DynamoDB.query与AWS.DynamoDB.DocumentClient.query

在DocumentClient中,文档明确指出:

文档客户端通过抽象化属性值的概念简化了对Amazon DynamoDB中的项目的处理。 这个抽象注释了作为input参数提供的本地JavaScripttypes,以及将注释的响应数据转换为本机JavaScripttypes。

提供与AWS.DynamoDB.query()相同的参数,并用原生JavaScripttypes替代AttributeValues。

也许你也参考了DynamoDB API Reference ,它实际上并没有假设使用的SDK,而是在示例中使用纯HTTP请求。

因此,使用AWS.DynamoDB.DocumentClient您可以按照@ gior91的build议为ExpressionAttributeValues提供一个简单的键值映射。

尝试用这个replace你的查询JSON:

 { TableName: 'Configs', IndexName: 'publisher_index', KeyConditionExpression: '#publisherId = :pub_id', ExpressionAttributeNames: { '#publisherId': 'publisherId' }, ExpressionAttributeValues: { ':pub_id': { 'S': '700' } } }