Javascript 不带排序键的DynamoDB查询
我有一个DynamoDB表,其中包含主键:userID、排序键:sessionID和另一个名为examID的列 我想返回一个列表,该列表返回由我发送的具有userID和examID的所有记录。 这是我的密码:Javascript 不带排序键的DynamoDB查询,javascript,amazon-web-services,amazon-dynamodb,dynamodb-queries,Javascript,Amazon Web Services,Amazon Dynamodb,Dynamodb Queries,我有一个DynamoDB表,其中包含主键:userID、排序键:sessionID和另一个名为examID的列 我想返回一个列表,该列表返回由我发送的具有userID和examID的所有记录。 这是我的密码: export const main = handler(async (event, context) => { const data = JSON.parse(event.body); const params = { TableName: process.env.
export const main = handler(async (event, context) => {
const data = JSON.parse(event.body);
const params = {
TableName: process.env.tableNameExamResults,
KeyConditionExpression: "userId = :userId and examId = :examId",
ExpressionAttributeValues: {
":userId": event.requestContext.identity.cognitoIdentityId,
":examId": data.examId
}
};
const result = await dynamoDb.query(params);
return result.Items;
});
这是我得到的错误:
{
“状态代码”:500,
“body”:“{”error:“查询条件缺少关键架构元素:sessionId”}”
我想也许我应该包括一个过滤器表达式,或者不确定是否必须用索引重新创建数据库
非常感谢您的帮助。谢谢您我刚刚添加了一个新的GSI,然后还编辑了我的代码:
const params = {
TableName: process.env.tableNameExamResults,
IndexName: 'userId-examId-index',
KeyConditionExpression: "userId = :userId and examId = :examId",
ExpressionAttributeValues: {
":userId": event.requestContext.identity.cognitoIdentityId,
":examId": data.examId
}
};
这似乎现在起作用了。我考虑过基于用户ID进行查询,获取所有sessionId,然后通过examID使用FilterExpression进行过滤。不确定如何准确实现。Docu对我来说有点不清楚……创建新索引将创建一个新表,从而增加成本。如果每个用户都需要,我建议使用投影来提取数据很少有考试。