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?
使用作为参数传入的 '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?