所以我有一个员工的发电机表,其中包含以下字段
employeeid(主索引/哈希键)
某某 (GSI)
名字 (GSI)
姓氏
电子邮件
多布
秘钥
地址
电话
电子邮件 (GSI)
除了上面的字段之外,我无法在任何其他字段上创建 gsi。
我需要做的是寻找具有相同特征的员工
名字,
姓氏,
出生日期
和 secret key ,
如果我没有,那么我需要插入一名新员工(如果我需要)执行某项操作。
在 dynamodb 中是否有一种使用 C# 的方法可以在这 4 个字段上进行搜索?
我的名字有一个 gsi,我不想使用允许我使用过滤器的扫描,有没有办法使用我拥有的名字 gsi 进行查询或过滤,而无需对表。
如有任何建议,我们将不胜感激。
感谢您的阅读。
更新
这是我在 C# 中尝试过的
var request = new QueryRequest()
{
TableName = "employee",
IndexName = "firstName-employeeId-index",
Select = Select.ALL_ATTRIBUTES,
ScanIndexForward = false
};
String keyConditionExpression;
Dictionary<string, AttributeValue> expressionAttributeValues = new Dictionary<string, AttributeValue>();
keyConditionExpression = "firstName = :firstName and lastName = :lastName ";
expressionAttributeValues.Add(":firstName", new AttributeValue { S = firstName });
expressionAttributeValues.Add(":lastName", new AttributeValue { S = lastName });
request.KeyConditionExpression = keyConditionExpression;
request.ExpressionAttributeValues = expressionAttributeValues;
var result = await Client.QueryAsync(request);
当我运行上面的代码时,它查找我的哈希键,出现错误。
最佳答案
我发布的问题代码缺少一行,我发现,下面是我正在寻找的内容。
var request = new QueryRequest()
{
TableName = "employee",
IndexName = "firstName-employeeId-index",
Select = Select.ALL_ATTRIBUTES,
ScanIndexForward = false
};
String keyConditionExpression;
Dictionary<string, AttributeValue> expressionAttributeValues = new Dictionary<string, AttributeValue>();
keyConditionExpression = "firstname = :firstname";
expressionAttributeValues.Add(":firstname", new AttributeValue { S = firstname });
expressionAttributeValues.Add(":lastName", new AttributeValue { S = lastname });
request.KeyConditionExpression = keyConditionExpression;
request.FilterExpression = "lastname = :lastname";
request.ExpressionAttributeValues = expressionAttributeValues;
var result = await Query<EmployeeDataModel>(Client, request);
关于java - 带 GSI 的 dynamodb 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37606992/