Javascript DynamoDB:ValidationException:提供的键元素与架构不匹配

Javascript DynamoDB:ValidationException:提供的键元素与架构不匹配,javascript,node.js,amazon-dynamodb,aws-sdk-js,aws-sdk-nodejs,Javascript,Node.js,Amazon Dynamodb,Aws Sdk Js,Aws Sdk Nodejs,我得到了错误ValidationException:提供的键元素与模式不匹配试图在我的数据库中查找字段username,手动查询id时,我得到了一个响应,但使用username我得到了错误 const readKey=async(表、查询数据、列)=>{ 常量参数={ TableName:table, 键:{}, } //{TableName:'users',Key:{username:'Maarten'}} 参数键[列]=查询数据 返回等待新承诺((res,rej)=>{ dynamodb.g

我得到了错误
ValidationException:提供的键元素与模式不匹配
试图在我的数据库中查找字段
username
,手动查询
id
时,我得到了一个响应,但使用
username
我得到了错误

const readKey=async(表、查询数据、列)=>{
常量参数={
TableName:table,
键:{},
}
//{TableName:'users',Key:{username:'Maarten'}}
参数键[列]=查询数据
返回等待新承诺((res,rej)=>{
dynamodb.get(参数,(错误,数据)=>{
如果(错误){
rej(err)
console.log(错误)
}
console.log(数据)
资源(数据)
})
})
}
答复如下:

消息:“提供的键元素与架构不匹配”,
代码:“ValidationException”,
时间:2019-11-24T23:50:37.472Z,
requestId:'RHQF02LFVE7V3NNSGDBF8JR97RVV4KQNSO5AEMVJF66Q9ASUAJG',
状态代码:400,
可检索:错误,
retryDelay:14.742327788838905
当我将参数更改为以下值时:

const params = {
  TableName: table,
  Key: {
    id: '22601770-37ea-47ce-9814-bd979ca4c841',
  },
}
我得到的答复是:

{
项目:{
id:'22601770-37ea-47ce-9814-bd979ca4c841',
密码:“$2b$10$f/gxrrsccalpredchixowvuhzi2ex07deedv4h10uun.DgYY2Hnq”,
用户名:“Maarten”
}
}

我做错了什么?

您不能查询非哈希键字段,在这种情况下,可能只有
id
是哈希键,
username
不是。如果不是我说的,请提供创建表的方法。@hoangdv那么解决这个问题的最佳方法是什么?如何根据数据库检查用户?您可以创建一个GSI(全局二级索引)并将
username
设置为哈希键。如果要按非分区的值进行搜索,可以在表中添加一个排序键,如
username
,并对排序键执行
query()
操作。查询的强度不如扫描,但请注意,get操作将同时需要分区和排序键。我创建了
username
我的主键,但我仍然收到了错误。你能提供一个实现的例子吗?