DynamoDB 中的条件表达式和筛选表达式、运算符及函数
要操作 DynamoDB 表中的数据,请使用 PutItem
、UpdateItem
和 DeleteItem
操作。对于这些数据处理操作,您可指定条件表达式 来确定应修改的项目。如果条件表达式的计算结果为 true,则操作成功。否则,该操作将失败。
本节介绍用于在 Amazon DynamoDB 中编写筛选表达式和条件表达式的内置函数和关键字。有关 DynamoDB 的函数和编程的更多详细信息,请参阅使用 DynamoDB 和 Amazon SDK 编程和 DynamoDB API 参考。
筛选条件和条件表达式的语法
在以下语法摘要中,操作数
可以为下列对象:
-
顶级属性名称,例如
Id
、Title
、Description
或ProductCategory
-
引用嵌套属性的文档路径
condition-expression ::=
operand
comparatoroperand
|operand
BETWEENoperand
ANDoperand
|operand
IN (operand
(','operand
(, ...) )) | function |condition
ANDcondition
|condition
ORcondition
| NOTcondition
| (condition
) comparator ::= = | <> | < | <= | > | >= function ::= attribute_exists (path
) | attribute_not_exists (path
) | attribute_type (path
,type
) | begins_with (path
,substr
) | contains (path
,operand
) | size (path
)
进行比较
使用以下比较器将操作数与单个值进行比较:
-
– 如果a
=b
a
等于b
,则为 True。 -
– 如果a
<>b
a
不等于b
,则为 True。 -
– 如果a
<b
a
小于b
,则为 True。 -
– 如果a
<=b
a
小于等于b
,则为 True。 -
– 如果a
>b
a
大于b
,则为 True。 -
– 如果a
>=b
a
大于等于b
,则为 True。
使用 BETWEEN
和 IN
关键字来将操作数与值范围或值的枚举值列表进行比较:
-
– 如果a
BETWEENb
ANDc
a
大于或等于b
,且小于或等于c
,则为 True。 -
– 如果a
IN (b
,c
,d
)a
等于列表中的任何值 — 例如b
、c
或d
,则为 True。列表最多可以包含 100 个值,以逗号分隔。
函数
使用以下函数确定项目中是否存在某个属性,或者对属性求值。这些函数名称区分大小写。对于嵌套属性,您必须提供其完整文档路径。
函数 | 描述 |
---|---|
|
如果项目包含 示例:检查
|
|
如果项目中不存在由 示例:检查项目是否具有
|
|
如果指定路径中的属性为特定数据类型,则为 true。
您必须使用 示例:检查
您必须使用 |
|
如果 示例:检查前视图图片 URL 的前几个字符是否为
表达式属性值 |
|
如果
如果由 路径和操作数必须不同。也就是说, 示例:检查
表达式属性值 示例:检查产品是否有红色。
表达式属性值 |
|
返回一个代表属性大小的数字。以下是与 如果属性类型为 示例:检查字符串
如果属性类型为 示例:假设
如果属性是一个 示例:检查产品是否有多种颜色。表达式属性值
如果属性类型为 示例:检查
|
逻辑评估
使用 AND
、OR
和 NOT
关键字执行逻辑评估。在以下列表中,a
和 b
代表要评估的条件。
-
– 如果a
ANDb
a
和b
均为 true,则为 True。 -
– 如果a
ORb
a
和/或b
为 true,则为 True。 -
NOT
– 如果a
a
为 false,则为 True。如果a
为 true,则为 False。
以下是操作中 AND 的代码示例。
dynamodb-local (*)> select * from exprtest where a > 3 and a <
5;
圆括号
使用圆括号更改逻辑评估的优先顺序。例如,假设条件 a
和 b
为 true,而条件 c
为 false。以下表达式的计算结果为 True:
-
a
ORb
ANDc
但是,如果将一个条件括在圆括号中,则会先对该条件求值。例如,以下表达式的计算结算为 False:
-
(
a
ORb
) ANDc
注意
您可以在表达式中嵌套圆括号。最里面的部分最先评估。
以下是逻辑评估中带有括号的代码示例。
dynamodb-local (*)> select * from exprtest where attribute_type(b, string) or
( a = 5 and c = “coffee”);
条件的优先顺序
DynamoDB 使用以下优先顺序规则从左向右评估条件:
-
= <> < <= > >=
-
IN
-
BETWEEN
-
attribute_exists attribute_not_exists begins_with contains
-
圆括号
-
NOT
-
AND
-
OR