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