繁体   English   中英

DynamoDb.net:添加多个扫描条件

[英]DynamoDb.net: Adding multiple scan conditions

我在这里使用Dynamodb.net。 如何添加多个扫描条件,以便根据这些条件过滤掉数据。 我正在使用以下代码:

var creds = new BasicAWSCredentials(awsId, awsPassword);
var dynamoClient = new AmazonDynamoDBClient(creds, awsDynamoDbRegion);
var context = new DynamoDBContext(dynamoClient);
List<ScanCondition> conditions = new List<ScanCondition>();
//  conditions.Add(new ScanCondition("Id", ScanOperator.Equal, myId));
conditions.Add(new ScanCondition("name", ScanOperator.Equal, myName));
var response = await context.ScanAsync<Data>(conditions).GetRemainingAsync();
return response;

在上面的代码中,如果添加2个扫描条件,则无法正常工作。 但确实有一个条件。 不知道我在这里做错了什么。

您的代码看起来不错,但有一个警告: 扫描条件适用于非关键属性

我要冒昧地假设Id是表的分区键(或排序键)。 如果是这样,那就是为什么您不能在扫描条件下使用它。 您可以添加多个扫描条件,但是它们必须全部用于非关键属性。

为了指定关键条件,必须使用Query操作,而不是Scan

假设您的表只有一个主键而没有排序键,那么下面的示例应该可以工作。 但是,如果表也具有排序键,则您的查询也必须包括该排序键,因此,下面的示例将需要稍作修改。

var creds = new BasicAWSCredentials(awsId, awsPassword);
var dynamoClient = new AmazonDynamoDBClient(creds, awsDynamoDbRegion);
var context = new DynamoDBContext(dynamoClient);


var opConfig = new DynamoDBOperationConfig();
opConfig.QueryFilter = new List<ScanCondition>();
opConfig.QueryFilter.Add(new ScanCondition("name", ScanOperator.Equal, myName));
var response = await context.QueryAsync<Data>(myId, opConfig).GetRemainingAsync();
return response;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM