我使用的是Vogels,NodeJS的NodeJS数据映射器。根据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。
根据文档,这是我获得数据所要做的全部工作。我是否遗漏了什么来查询这个索引?如有任何答复,将不胜感激。提前谢谢。
发布于 2020-06-11 05:00:56
如果有人被困在同一个问题上,答案是:在模型中创建新的索引(本地二级索引或全局辅助索引)之后,将运行Migrations。只有在那之后,表才会有指定的索引。有关更多说明,请参阅本期。
发布于 2020-08-30 18:47:07
-如果您在serverless-dynamodb-local和serverless-offline插件中使用Serverless框架(用于本地测试)。
-如果创建了新的本地辅助索引,但下面显示的命令仍未在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命令重新启动服务。这将强制使用适当的DynamoDB本地辅助索引重新创建本地数据库文件。
要删除本地DynamoDB数据库文件,请执行以下操作:
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数据库文件。
https://stackoverflow.com/questions/62278154
复制相似问题