【问题标题】:Why is there no **not equal** comparison in DynamoDB queries?为什么在 DynamoDB 查询中没有 **not equal** 比较?
【发布时间】:2017-07-09 15:34:40
【问题描述】:

我尝试使用生成分区键 category 和排序键 tinponId 的二级索引查询我的表 Tinpon。我的目标是排除具有某些 tinponIds 的项目。我的第一个想法是进行否定比较: keyConditionExpression = "category = :category AND tinponId != :tinponId" 但只有相等的 = 比较。然后我尝试了其他方法(遗憾的是不存在): keyConditionExpression = "category = :category NOT tinponId = :tinponId" keyConditionExpression = "category = :category AND tinponId <> :tinponId" keyConditionExpression = "category = :category AND tinponId < :tinponId AND tinponId > :tinponId" the AWS guide 之后没有不等于比较。为什么这样? 有没有办法查询 DynamoDB,不包括 id 列表,或者是检索一大堆项目并稍后手动过滤它们的唯一选择?

【问题讨论】:

    标签: database amazon-web-services nosql amazon-dynamodb


    【解决方案1】:

    KeyConditionExpression 不允许排序键不等于。但是,您可以在FilterExpression 中使用“不等于,即”

    KeyConditionExpression : 'category = :category',    
    FilterExpression : 'tinponId  <> :tinponIdVal',
    ExpressionAttributeValues : {
        ':category' : 'somevalue',
        ':tinponIdVal' :  'somevalue'
    }
    

    【讨论】:

    • 好的,我的下一个问题是我选择了 tinponId 作为我的 Tinpon 表的主键,现在得到错误 Filter Expression can only contain non-primary key attributes is there另一种解决方案,还是我必须更改表格的设计才能使用您建议的过滤方法?
    • 您必须使用 GSI(并可能查询具有不同分区键的 GSI)或更改主表的设计以具有不同的分区键。
    • @notionquest 这个答案你是用户查询还是扫描操作。
    • 谢谢你 V.Much... :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多