【问题标题】:Multiple FilterExpression in dynamodb scandynamodb 扫描中的多个 FilterExpression
【发布时间】:2021-07-24 05:51:55
【问题描述】:

我正在尝试在我的 dynamodb 中构建某个属性的直方图。
我认为最简单的方法是使用多个filter-expression
这是我使用单个 filter-expression 的基线查询,它可以工作

aws dynamodb scan --table-name test --select "COUNT" --filter-expression "contains(score, :s)" --expression-attribute-values '{ ":s": { "N": "1" } }' --limit 100

现在,我试图将其扩展到多个 filter expressions,但我不确定如何。
我试过了:

aws dynamodb scan --table-name test --select "COUNT" --filter-expression "score = :s" --filter-expression "score = :s1" --expression-attribute-values '{ ":s": { "N": "1" }, ":s1": { "N": "40" } }' --limit 100

aws dynamodb scan --table-name test --select "COUNT" --filter-expression "score = :s" | "score = :s1" --expression-attribute-values '{ ":s": { "N": "1" }, ":s1": { "N": "40" } }' --limit 100

【问题讨论】:

    标签: amazon-dynamodb aws-cli


    【解决方案1】:

    我可能回答迟了。但是,正在寻找类似的场景,却一无所获。如果其他人可以受益,仍在回答。

    aws dynamodb scan --table-name test --select "COUNT" \
    --filter-expression "score = :s OR score = :s1" \
    --expression-attribute-values '{ ":s": { "N": "1" }, ":s1": { "N": "40" } }' \
    --limit 100
    

    【讨论】:

    • 你怎么能把--filter-expression的属性写在名字上面有:?例如,使用 score 代替 custom:attribute?
    【解决方案2】:

    过滤表达式是一种条件表达式。你可以combine filter expressions with boolean logic。但是,在您的示例中,您可以不使用 AND/OR 运算符来组合表达式。

    aws dynamodb scan --table-name test --select "COUNT" \
    --filter-expression "score IN :s, :s1" \
    --expression-attribute-values '{ ":s": { "N": "1" }, ":s1": { "N": "40" } }' \
    --limit 100
    

    【讨论】:

    • 这是运行查询后返回的内容:调用扫描操作时发生错误(ValidationException):无效的FilterExpression:语法错误;令牌:“:s”,附近:“IN :s”,
    • 需要括号吗? score IN (:s, :s1)
    【解决方案3】:

    使用之间

    aws dynamodb scan --table-name test --select "COUNT"  \
    --filter-expression "(score between :s and :s1)"  \
    --expression-attribute-values '{ ":s": { "N": "0" }, ":s1": { "N": "10" } }'
    

    【讨论】:

      【解决方案4】:

      对于那些正在搜索nodeJs 过滤表达式的人:

      const params = {
              TableName: "orderMessages",
              Key: {
                  order_id,
                  
              },
              FilterExpression: "#order_id = :ordrId OR #timestamp < :ts",
              ExpressionAttributeNames: {
                  "#order_id": "order_id",
                  "#timestamp": "timestamp"
                },
                ExpressionAttributeValues: {
                  ":ordrId": order_id,
                  ":ts": now
                },
          }

      编码愉快:)

      【讨论】:

        猜你喜欢
        • 2018-02-05
        • 2018-08-23
        • 2020-07-01
        • 2023-03-27
        • 2021-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多