node.js - 在 dynamodb Local 中查询全局二级索引

标签 node.js amazon-dynamodb aws-sdk

我正在根据文档使用这些参数在 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 可以是 HASHRANGE,并且您设置了 AttributeTypeAttributeDefinitions 字段中。我将 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/

相关文章:

node.js - 在 nest.js 代码库上找不到模块 (MODULE_NOT_FOUND)

javascript - 由于大数据 js 文件,browserify 和 babelify 非常慢

node.js - 为什么 DynamoDB 使用 Limit 和 FilterExpression 扫描不返回符合过滤器要求的项目?

java - 在 Mac OS X 上使用 java 命令运行 DynamoDB Local

ios - 在不使用身份池的情况下在 IOS 上使用 AWS sdk

node.js,捕获错误以便脚本不会中断?

javascript - node.js 包的正确位置是什么

node.js - DynamoDB - 扫描不返回所有项目

android - Retrofit2-AWS S3 多部分图像文件损坏问题

node.js - 如何启用对 AWS STS AssumeRole 的访问