ValidationException:查询条件缺少关键架构元素:公司'

ValidationException: Query condition missed key schema element: company'

使用作为参数传入的 'Country' 字段和 returns 此公司对象在数据库中搜索类型 '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];
};

由于我的日志没有显示这段代码中的日志,所以它还没有到那一步。调用此函数的代码抛出了一个 ValidationException: Query condition missed key schema element: company 。不太清楚这意味着什么或我应该改变什么。

Query 请求用于扫描单个分区的一部分,而不是整个 table(为此,您有 Scan 请求。这意味着 KeyConditionExpression must include an equality condition with your partition-key attribute. 错误消息表明 company 是您的分区键属性,并且在 KeyConditionExpression.

请注意,您的查询在 IndexName 中指定了一个 GSI,它有自己的键列,您必须使用 KeyConditionExpression 中的那些。也许您在此查询中使用了错误的 GSI,或者根本不应该使用 GSI?