Dynamodb BETWEEN 字符串操作

Kir*_*ks 5 amazon-dynamodb dynamodb-queries

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

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

Cos*_*tin 2

在您的情况下,您需要使用表达式属性名称表达式属性值。这在任何 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"}}'
Run Code Online (Sandbox Code Playgroud)

我有一段时间没有使用这种语法了,可能会出现一些小语法错误,但这是您为了使用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"}
    }'
Run Code Online (Sandbox Code Playgroud)

  • @Kirimaks,您可能想要对复合字符串的元素进行零填充,例如“000123 | 000420”。这是因为发电机比较是按字典顺序进行的,这意味着“1 < 10 < 2”,而您可能需要“1 < 2 < 10”,因此将其设置为“01 < 02 < 10”。 (2认同)