有没有办法在Amazon的AWS SDK for Java中使用单个查询查询多个哈希键?
这是我的问题; 我有一个项目状态的数据库表.哈希键是项目的状态(即:新建,分配,处理或完成).范围键是一组项目ID.目前,我有一个查询设置,只是简单地找到列为"已分配"状态(哈希)的所有项目,另一个查询设置为查找"处理"状态.有没有办法使用单个查询执行此操作,而不是为我需要查找的每个状态发送多个查询?代码如下:
DynamoDBMapper mapper = new DynamoDBMapper(new AmazonDynamoDBClient(credentials));
PStatus assignedStatus = new PStatus();
assignedStatus.setStatus("assigned");
PStatus processStatus = new PStatus();
processStatus.setStatus("processing");
DynamoDBQueryExpression<PStatus> queryAssigned = new DynamoDBQueryExpression<PStatus>().withHashKeyValues(assignedStatus);
DynamoDBQueryExpression<PStatus> queryProcessing = new DynamoDBQueryExpression<PStatus>().withHashKeyValues(processStatus);
List<PStatus> assigned = mapper.query(PStatus.class, queryAssigned);
List<PStatus> process = mapper.query(PStatus.class, queryProcessing);
Run Code Online (Sandbox Code Playgroud)
所以基本上,我想知道是否有可能消除queryAssigned和assigned变量assignedStatus并processStatus通过相同的查询处理它们process,以查找非新的或完整的项目.
我的表中有2个LSI,带有主分区键和主分类键
Org-ID - 主分区密钥
ClientID-主要排序键
性别 - LSI
部分 - LSI
查询具有一个LSI的表没有问题,但是如何在表模式中提及2个LSI.
var params = {
TableName:"MyTable",
IndexNames: ['ClientID-Gender-index','ClientID-Section-index'],
KeyConditionExpression : '#Key1 = :Value1 and #Key2=:Value2 and #Key3=:Value3',
ExpressionAttributeNames:{
"#Key1":"Org-ID",
"#Key2":"Gender",
"#Key3":"Section"
},
ExpressionAttributeValues : {
':Value1' :"Microsoft",
':Value2':"Male",
':Value3':"Cloud Computing"
}};
Run Code Online (Sandbox Code Playgroud)
任何人都可以在IndexName(第3行)或KeyConditionExpression(第4行)中解决问题,我不确定.
问题
条件可以是长度1或2
在Dynamodb中,您需要在索引中指定可用于进行查询的属性.
如何使用两个以上的属性进行查询?
使用boto的示例.
Table.create('users',
schema=[
HashKey('id') # defaults to STRING data_type
], throughput={
'read': 5,
'write': 15,
}, global_indexes=[
GlobalAllIndex('FirstnameTimeIndex', parts=[
HashKey('first_name'),
RangeKey('creation_date', data_type=NUMBER),
],
throughput={
'read': 1,
'write': 1,
}),
GlobalAllIndex('LastnameTimeIndex', parts=[
HashKey('last_name'),
RangeKey('creation_date', data_type=NUMBER),
],
throughput={
'read': 1,
'write': 1,
})
],
connection=conn)
Run Code Online (Sandbox Code Playgroud)
如何查找姓名为"John",姓氏为"Doe"并使用boto在"3-21-2015"创建的用户?
我尝试使用二级索引查询我的表Tinpon,产生一个分区键类别和排序键tinponId.我的目标是排除带有某些tinponIds的物品.我首先想到的是使负比较:
keyConditionExpression = "category = :category AND tinponId != :tinponId"
但只有一个等于=对比.然后我尝试了serval其他方法(遗憾的是不存在):
keyConditionExpression = "category = :category NOT tinponId = :tinponId"
keyConditionExpression = "category = :category AND tinponId <> :tinponId"
keyConditionExpression = "category = :category AND tinponId < :tinponId AND tinponId > :tinponId"
遵循AWS指南,没有不相等的比较.为什么这样?有没有办法查询除了id列表之外的DynamoDB,或者是检索一大堆项目并在以后手动过滤它们的唯一选项?