Búsqueda de sitios web

typescript - ValidationException: La condición de la consulta omitió el elemento del esquema clave: company'


Consulta que busca en la base de datos un tipo 'Company' con el campo 'Country' pasado como argumento, y devuelve este objeto Company.

export const companyQuery = async (country: string): Promise<Company> => {
  const queryParams: DocumentClient.QueryInput = {
    TableName: process.env.DATABASE,
    IndexName: 'type-company-GSI',
    KeyConditionExpression: '#type = :type AND #country = :country',
    ExpressionAttributeNames: {
      '#country': 'country',
      '#type': 'type',
    },
    ExpressionAttributeValues: {
      ':country': country,
      ':type': 'Company',
    },
  };
  Logger.Log(
    'LOGGER COMPANY QUERY ' + (await Database.query<Company>(queryParams))[0],
  );
  return (await Database.query<Company>(queryParams))[0];
};

Dado que mis registros no mostraban el registro en este fragmento de código, no está llegando tan lejos. El código que llama a esta función lanzó una ValidationException: Query condition missed key schema element: company. No estoy muy seguro de lo que eso significa o de lo que se supone que debo cambiar.

Respuesta #1

La solicitud Query se utiliza para escanear parte de una sola partición, no toda la tabla (para eso, tiene la solicitud Scan). Esto significa que KeyConditionExpression debe incluir una condición de igualdad con su atributo de clave de partición. El mensaje de error sugiere que company es su atributo de clave de partición, y falta en el KeyConditionExpression.

Tenga en cuenta que su consulta especifica un GSI en IndexName, que tiene sus propias columnas clave, y debe usar esas en KeyConditionExpression. ¿Quizás utilizó el GSI incorrecto en esta consulta, o no debería haber usado un GSI en absoluto?