为什么在DynamoDB查询中没有**不等于**的比较?

Kno*_*dge 3 sql database amazon-web-services amazon-dynamodb

我尝试使用二级索引查询我的表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,或者是检索一大堆项目并在以后手动过滤它们的唯一选项?

not*_*est 18

KeyConditionExpression不允许不等于该排序键.但是,您可以使用"不等同,即<>"FilterExpression.

KeyConditionExpression : 'category = :category',    
FilterExpression : 'tinponId  <> :tinponIdVal',
ExpressionAttributeValues : {
    ':category' : 'somevalue',
    ':tinponIdVal' :  'somevalue'
}
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我的下一个问题是,我选择 **tinponId** 作为我的 **Tinpon** 表的主键,现在收到错误“过滤器表达式只能包含非主键属性”是否有其他解决方案,或者做我必须更改表格的设计才能使用您建议的过滤方法吗? (2认同)
  • 您必须使用GSI(并且可能查询具有不同分区键的GSI)或更改主表的设计以具有不同的分区键. (2认同)