Query condition missed key schema element : Validation Error

前端 未结 4 2024
Happy的楠姐
Happy的楠姐 2021-01-01 08:57

I am trying to query dynamodb using the following code:

const AWS = require(\'aws-sdk\');

let dynamo = new AWS.DynamoDB.DocumentClient({
  serv         


        
4条回答
  •  悲&欢浪女
    2021-01-01 09:25

    I was getting this error for a different scenario. Here is my scenario. (It's very unlikely that anyone else ends up with this case, but incase)

    I had a query working on a Table (say table A). Table A had a partition key m_id and sort key u_id. I had a query to fetch data using m_id. The query was working.

    '''

    var queryParams = {
            ExpressionAttributeValues: {
              ':m_id': mId
             },
           KeyConditionExpression: 'm_id = :m_id',
           TableName: "A"
          };
        
       let connections = await docClient.query(queryParams).promise();
    

    '''

    I created another Table say Table B. I made some errors in naming keys so I simply deleted and created a table with the same name again, Table B. Table B had partition key m_id, and sort key s_id.

    I copied pasted the same query which I was using for Table A, I changed Table name only because partition key had the same name.

    To my shock, I get this expectation.

    "ValidationException: Query condition missed key schema element"

    I rechecked all the names, I compared the query with the working query. Everything was fine. I thought maybe because, I was deleting recreating Table B, it could be something with that. So I create a fresh Table with a new Name Table B2 with the same key names as Table B.

    In my query that was throwing exceptions, I changed only the Table name from B to B2. And the Exception was gone.

    If you are getting this on a fresh table, where no query has worked earlier, creating a new Table with a new name is an option.

    If you delete a Table only to change partition key names, it may be safer to use a new name for Table as well (Dynamo could be referring metadata by table names and not by internal identifiers, it is possible that old metadata stays even if you delete a table. Just a guess given I faced this case).

提交回复
热议问题