在dynamodb扫描中多次FilterExpression

Alb*_*t s 7 amazon-dynamodb aws-cli

我试图在我的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
Run Code Online (Sandbox Code Playgroud)

现在,我试图将它扩展到多个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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

小智 12

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

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
Run Code Online (Sandbox Code Playgroud)


Ale*_*kis 6

过滤表达式是条件表达式的一种。您可以将过滤表达式与布尔逻辑结合起来。但是,在您的示例中,您可以不使用 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
Run Code Online (Sandbox Code Playgroud)

  • 这是运行查询后返回的结果:调用 Scan 操作时发生错误 (ValidationException):Invalid FilterExpression: Syntax error; 标记:“:s”,附近:“IN :s,” (3认同)