es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Podemos eliminar un elemento en DynamoDB utilizando un GSI mediante el kit de desarrollo de AWS?

Tengo una tabla con GSI y estoy intentando eliminar un elemento usando GSI de la siguiente manera. Sin embargo, obtengo el siguiente error.

“El elemento clave proporcionado no coincide con el esquema”.

He intentado consultar utilizando la siguiente palabra clave y funcionó.
Entonces ya confirmé que el elemento clave proporcionado es correcto.
Intenté buscar si la operación de eliminación por GSI es posible o no, pero no pude encontrar una buena documentación.

¿Alguien podría decirme cuál es el mejor enfoque para eliminar un elemento usando GSI?

async function deleteProject(projectDB:string,projectId:string):Promise<any>{

const params={
    TableName:projectDB,
    IndexName:'projectId-index',
    Key:{
      'projectId':projectId,
    },
    ExpressionAttributeNames: { '#a': 'projectId' },
    ExpressionAttributeValues: {"val": projectId},
    ConditionExpression:"#a = :val",
  }
  const result=await db.delete(params).promise();
  console.log('result',result);

return result;
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error implica que el elemento clave proporcionado en el objeto Key no coincide con el esquema de la tabla de la que estás intentando eliminar. Por favor, asegúrate de que el atributo projectId sea la clave primaria en tu GSI projectId-index. Puedes verificar el esquema de tu tabla yendo a la consola AWS DynamoDB y mirando la pestaña “Detalles de la tabla”.

    Suponiendo que tu atributo projectId es de hecho la clave primaria de tu GSI projectId-index, verifica los valores del projectId que estás pasando a la función deleteProject con los datos de tu tabla. Es posible que estés pasando un valor que no existe en el atributo indexado projectId.

    En cuanto a tu pregunta sobre el mejor enfoque para eliminar un elemento utilizando un GSI, tu código actual parece correcto. Estás especificando el nombre del GSI utilizando la propiedad IndexName y luego proporcionando los atributos clave en el objeto Key. Esto debería funcionar siempre y cuando los elementos clave coincidan con el esquema del GSI.

Comments are closed.