Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带GSI的dynamodb滤波器_Java_C#_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Java 带GSI的dynamodb滤波器

Java 带GSI的dynamodb滤波器,java,c#,amazon-web-services,amazon-dynamodb,Java,C#,Amazon Web Services,Amazon Dynamodb,因此,我有一个dynamo表,用于包含以下字段的员工 employeeid(主索引/散列键) 其他人ID(GSI) 名字(GSI) 姓氏 电子邮件 dob 秘钥 地址 电话 电子邮件(GSI) 除了上面的内容外,我无法在任何其他字段上创建gsi 我需要做的是搜索具有相同特征的员工 firstname、lastname、dob和secretkey,如果我没有,那么我需要插入一名新员工,如果我需要执行操作 在dynamodb中有没有一种方法可以使用c#搜索这4个字段? 我在firstname上有一个

因此,我有一个dynamo表,用于包含以下字段的员工

employeeid(主索引/散列键)
其他人ID(GSI)
名字(GSI)
姓氏
电子邮件
dob
秘钥
地址
电话
电子邮件(GSI)

除了上面的内容外,我无法在任何其他字段上创建gsi

我需要做的是搜索具有相同特征的员工
firstname、
lastname、
dob
和secretkey,

如果我没有,那么我需要插入一名新员工,如果我需要执行操作

在dynamodb中有没有一种方法可以使用c#搜索这4个字段?

我在firstname上有一个gsi,我不想使用允许我使用过滤器的扫描,有没有一种方法可以在不扫描表的情况下使用我的firstname gsi进行查询或过滤

如有任何建议,将不胜感激

谢谢你的阅读

更新

这是我在c中尝试的#

var request=newqueryrequest()
{
TableName=“employee”,
IndexName=“firstName employeeId index”,
选择=选择所有属性,
ScanIndexForward=false
};
字符串键条件表达式;
字典表达式attributevalues=新字典();
keyConditionExpression=“firstName=:firstName和lastName=:lastName”;
expressionAttributeValues.Add(“:firstName”,新的AttributeValue{S=firstName});
expressionAttributeValues.Add(“:lastName”,新的AttributeValue{S=lastName});
request.KeyConditionExpression=KeyConditionExpression;
request.ExpressionAttributeValues=ExpressionAttributeValues;
var result=wait Client.QueryAsync(请求);

当我运行上面的程序查找hashkey时,出现了一个错误。

您可以直接查询辅助索引。请参阅下面的示例Java代码

此外,我建议您考虑将所有字段作为查询结果的一部分保留在GSI本身中,因为它会给您带来良好的性能。这完全取决于您的用例。这只是一个建议,考虑到您在本文中概述的一个场景

参考此

List queryResultJson=new ArrayList();
DynamoDB DynamoDB=新的DynamoDB(DynamoDB客户端);
Table Table=dynamoDB.getTable(“Table_name”);
Index=table.getIndex(“indexname”);
ItemCollection items=null;
QuerySpec QuerySpec=新QuerySpec();
querySpec.withKeyConditionExpression(“firstname=:val1”)
.withValueMap(新的ValueMap()
.使用字符串(“:val1”,fname));
items=index.query(querySpec);
迭代器Iterator=items.Iterator();
while(itemIterator.hasNext()){
添加(itemIterator.next().toJSON());
}

我发布的问题代码缺少一行,我发现,下面是我正在寻找的内容

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);
var request=newqueryrequest()
{
TableName=“employee”,
IndexName=“firstName employeeId index”,
选择=选择所有属性,
ScanIndexForward=false
};
字符串键条件表达式;
字典表达式attributevalues=新字典();
keyConditionExpression=“firstname=:firstname”;
expressionAttributeValues.Add(“:firstname”,新的AttributeValue{S=firstname});
expressionAttributeValues.Add(“:lastName”,新的AttributeValue{S=lastName});
request.KeyConditionExpression=KeyConditionExpression;
request.filtereexpression=“lastname=:lastname”;
request.ExpressionAttributeValues=ExpressionAttributeValues;
var结果=等待查询(客户端、请求);

索引名是否为gsi索引名?您的答案将与Java一起使用,我在C#上找到了我的解决方案,我将很快发布C#解决方案,谢谢您的回复!缺少的行,request.FilterExpression=“lastname=:lastname”;
    List<String> queryResultJson = new ArrayList<>();
    DynamoDB dynamoDB = new DynamoDB(dynamoDBClient);
    Table table = dynamoDB.getTable("table_name");
    Index index = table.getIndex("indexname");
    ItemCollection<QueryOutcome> items = null;

    QuerySpec querySpec = new QuerySpec();
    querySpec.withKeyConditionExpression("firstname = :val1")
            .withValueMap(new ValueMap()                        
                    .withString(":val1", fname));
    items = index.query(querySpec);
    Iterator<Item> itemIterator = items.iterator();
    while (itemIterator.hasNext()) {            
        queryResultJson.add(itemIterator.next().toJSON());
    }
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);