“The provided key element does not match the schema” error when getting an item from DynamoDB

前端 未结 3 1529
刺人心
刺人心 2020-12-24 01:23

This is the table partition key setting

The table content

When I tried to get an item from the table, it prints this error

botocore

相关标签:
3条回答
  • 2020-12-24 02:03

    I guess you don't have to put all the related attributes

    in my case I only have one PK as col

    const AWS = require('aws-sdk');
    const ddb = new AWS.DynamoDB.DocumentClient();
    
    exports.handler = (event, context, callback) => {
      const connectionId = event.requestContext.connectionId;
      deleteConnectionId(connectionId).then(() => {
        callback(null, { statusCode: 200 , message: 'userId deleted'});
      });
    };
    
    
    function deleteConnectionId(connectionId) {
      return ddb
        .delete({ TableName: 'your table name', 
            Key: {
                userId : connectionId.toString() // userId is my PK in this case
             }
        } )
        .promise();
    }
    
    0 讨论(0)
  • 2020-12-24 02:14

    Your table schema has both hash key and sort key defined. When using DynamoDB GetItem you must provide both of them, here is an excerpt from documentation

    For the primary key, you must provide all of the attributes. For example, with a simple primary key, you only need to provide a value for the partition key. For a composite primary key, you must provide values for both the partition key and the sort key.

    So given your example, here is how get_item parameters should look like:

    response = table.get_item(Key={'userId': "user2873", 'createdAt': "1489376547"})
    
    0 讨论(0)
  • 2020-12-24 02:18

    One other thing that works is the following code below:

    from boto3.dynamodb.conditions import Key
    
    result = table.query(
            KeyConditionExpression=Key('userId').eq('user2873')
        )
    
    0 讨论(0)
提交回复
热议问题