Node.js 如何在DynamoDB中使用getItem?

Node.js 如何在DynamoDB中使用getItem?,node.js,amazon-dynamodb,Node.js,Amazon Dynamodb,我试图从下面的dynamodb表中获取用户创建的项目列表。 为此,我设置了如下参数 ... cons userId = '***' const params = { TableName: MyTable, Key: { 'userId': { S: userId } } } ... 但我面临以下错误 Unable to read item. Error JSON: { "message": "The provided key element doe

我试图从下面的dynamodb表中获取用户创建的项目列表。

为此,我设置了如下参数

...
cons userId = '***'
const params = {
 TableName: MyTable,
 Key: {
  'userId': { S: userId }
 }
}
...
但我面临以下错误

Unable to read item. Error JSON: {
  "message": "The provided key element does not match the schema",
  "code": "ValidationException",
  "time": "2020-10-14T13:30:23.292Z",
  "requestId": "RCOGBKA34G61KDTIO9U4C16OBRVV4KQNSO5AEMVJF66Q9ASUAAJG",
  "statusCode": 400,
  "retryable": false,
  "retryDelay": 36.415675258395865
}

我怎么了?

您指定了一个名为
userId
的键,但是您的屏幕截图显示了一个名为
pk
的分区键

错误消息表示您提供的密钥(
userId
)与架构不匹配(
PK

我注意到,
userId
是项目的属性,而不是主键中的属性。在这种情况下,您可以使用
scan
操作。
scan
操作的参数如下所示:

{
  "TableName": "<YOUR TABLE NAME>",
  "FilterExpression": "#userId = :userId",
  "ExpressionAttributeValues": {
    ":userId": {
      "S": "<USER ID HERE>"
    }
  },
  "ExpressionAttributeNames": {
    "#userId": "userId"
  }
}

{
“表名”:“,
“FilterExpression”:“#userId=:userId”,
“ExpressionAttributeValue”:{
“:userId”:{
“S”:”
}
},
“ExpressionAttributeNames”:{
“#userId”:“userId”
}
}

请记住,
scan
操作将读取表中的每条记录。另外,扫描可能会返回分页结果,因此请确保在DynamoDb中进行查询。

谢谢您的回答,那么您的意思是,如果没有Key in Params中的pk和sk,则无法完成查询吗?这是正确的。查询操作通过指定主键值来工作。您可以自行指定分区键(在您的情况下为PK),也可以指定分区键和排序键。API文档中的更多信息;如果您试图使用非键属性(
userId
不在主键中)搜索数据库,则需要使用
scan
操作。我尝试了scan,但它运行正常,但返回空结果。虽然这不是您最初的问题,我已经更新了我的答案,向您展示了
userId
的扫描操作。