【问题标题】:Dynamodb BETWEEN operation for strings字符串的 Dynamodb BETWEEN 操作
【发布时间】:2019-10-03 12:53:59
【问题描述】:

我找不到任何有关 dynamodb BETWEEN 运算符的详细文档,尤其是它如何处理字符串。

例如,如果我进行诸如“... sort_key Between '100' and '150'”之类的查询,并且排序键为“120”,则它可以正常工作。 但是,如果我制作像“1224|67”或“6653|67”这样的字符串,然后查询 在“3456|67”和“8968|67”​​之间,它不起作用。如何获取这种比较在内部如何工作的信息?

【问题讨论】:

    标签: amazon-dynamodb dynamodb-queries


    【解决方案1】:

    在您的情况下,您需要使用表达式属性名称表达式属性值。这在任何 DynamoDB 查询中都是非常好的做法。

    请注意,您还需要设置一个分区键(参见下面的#pk:pk)。

    aws dynamodb query \
        --table-name TABLE_NAME \
        --key-condition-expression "#pk = :pk AND #sk BETWEEN :a and :b" \
        --expression-attribute-names '{"#sk": "sort_key", "#pk": "partition_key"}' \
        --expression-attribute-values '{":a": {"S":"3456|67"}, ":b": {"S":"8968|67"}, ":pk":{"S":"partition_key_value"}}'
    

    我有一段时间没有使用此语法,可能会出现一些小的语法错误,但这是您必须执行的操作才能使用 BETWEEN 进行查询。

    见最后一个关于KeyConditions的例子:

    aws dynamodb query \
        --table-name Music \
        --key-condition-expression 'Artist = :a AND SongTitle BETWEEN :t1 AND :t2' \
        --expression-attribute-values '{
            ":a": {"S": "No One You Know"}, 
            ":t1": {"S": "A"}, 
            ":t2": {"S": "M"}
        }'
    

    【讨论】:

    • 您好,感谢您的回答,这正是我的做法,但我使用的是 boto3。我的问题的重点是,当我使用复合字符串进行查询时,有时会得到奇怪的结果。似乎它适用于由“_”而不是“|”分隔的字符串。
    • 有趣...我现在无法测试它,但我会试一试。你有最后期限还是可以等到周末? “有时”是什么意思?随意编辑问题以解释“有时”:)
    • 您好,如有任何信息,我将不胜感激。关于“有时”,我的意思是它的工作方式不可预测。例如,如果我使用哈希键查询:“{timestamp}_{id}”它不起作用,但“{id}_{timestamp}”有效。带“|”因为分隔符有时有效,有时无效(无法确定)。
    • @Kirimaks 您可能希望对复合字符串的元素进行零填充,例如000123|000420。这是因为发电机比较是按字典顺序进行的,这意味着 1 < 10 < 2 并且您可能想要 1 < 2 < 10,所以将其设为 01 < 02 < 10
    • 你是对的@DimaTisnek,经常需要填充内容
    猜你喜欢
    • 2019-11-16
    • 2011-05-12
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2020-06-08
    相关资源
    最近更新 更多