node.js - ValidationException:该表没有指定的索引:GameTitleIndex
问题描述
我正在使用 Vogels,用于 NodeJS 的 DynamoDB 数据映射器。我正在根据 Vogels 的文档查询全局索引。我所做的只是创建了一个具有全局二级索引的模型,如下所示:
let MyModel = vogels.define('MyModel', {
hashKey: 'uuid',
timestamps: true,
updatedAt: 'updated_at',
createdAt: 'created_at',
schema: MyModelBaseSchema,
indexes : [{
hashKey : 'gameTitle', rangeKey : 'topScore', name : 'GameTitleIndex', type : 'global'
}]
});
并针对该索引进行查询
MyModel.query('game 1')
.usingIndex('GameTitleIndex')
.loadAll()
.select("COUNT");
运行任何测试时都会显示异常ValidationException: The table does not have the specified index: GameTitleIndex
根据文档,这就是我获取数据所要做的一切。有什么我错过了查询这个索引的吗?任何答案将不胜感激。提前致谢。
解决方案
– 如果您使用 Serverless 框架和serverless-dynamodb-local和serverless -offline插件(用于本地测试)。
– 如果您创建了新的Local Secondary Index,但下面显示的命令仍未在LocalSecondaryIndexes
配置节点下显示它:
aws dynamodb describe-table --table-name YOUT_TABLE_NAME --endpoint-url http://localhost:8000
– 如果您ValidationException: The table does not have the specified index: YOUR_INDEX_NAME
在使用类似于如下所示的代码时收到错误消息:
query(uid, id) {
const params = {
TableName: YOUR_TABLE_NAME,
IndexName: YOUR_LSI_NAME,
KeyConditionExpression: "#uid = :uid and #id = :id",
ExpressionAttributeNames: {
"#uid": "uid",
"#id": "id",
},
ExpressionAttributeValues: { ":uid": uid, ":id": id },
};
return DB.query(params).promise();
}
然后很可能您需要删除本地 DynamoDB 数据库文件并使用serverless offline start
命令重新启动服务。这将强制使用适当的Local Secondary Indexes重新创建本地 DynamoDB 数据库文件。
要删除本地 DynamoDB 数据库文件,请执行以下操作:
- 通过指定 DynamoDB 数据库的路径来更新
serverless.yml
,如下所示:
custom:
dynamodb:
stages:
- ${self:provider.stage}
start:
port: 8000
inMemory: true
migrate: true
dbPath: "./.db" # Make sure that folder exists!
- 现在您可以转到文件夹
./.db
并删除文件shared-local-instance.db
(这是一个模仿 DynamoDB :0 的 SQLite 数据库)。
结果,在下次使用该命令启动时,serverless offline start
将创建最新的本地 DynamoDB 数据库文件。
推荐阅读
- node.js - nextJS / NodeJS 不断触发 ip_ban
- flutter - 找不到捆绑的 Java 版本。MacBook Air M1
- java - 使用 spock 框架测试状态机
- c# - 如何更改视图组件参数.Net Core
- webview2 - Webview20.9.430 库创建环境失败
- google-cloud-platform - 谷歌 cloudbuild 的秘密没有被取代
- python - 如何停止执行脚本,除非不退出交互式会话
- javascript - Discord.js 异步和等待
- ruby-on-rails - Sidekiq 在没有作业运行的情况下吃掉了太多的 RAM
- c# - 如何在 c# 的 WPF 应用程序中每秒移动一个矩形