在前面章节我们讲到Scan命令会扫描全表,并且返回最多1MB数据。Scan
和Query
类似,不同之后我们是扫描的全表,而不是一个Item Collection
,另外在Scan中不能传入Key Condition表达式。但可以使用Filter
表达式来减少返回结果的数量
例如,查询Reply表中所有User A发表的评价:
aws dynamodb scan \
--table-name Reply \
--filter-expression 'PostedBy = :user' \
--expression-attribute-values '{
":user" : {"S": "User A"}
}' \
--return-consumed-capacity TOTAL
在返回结果里看到:
"Count": 3,
"ScannedCount": 4,
这表明Scan
扫描了全表的4条记录,但是Filter表达式筛选出来3条满足条件的
有时候Scan返回的结果条目非常多,如果想对它分页的话,可以使用--max-items
来指定返回结果的数量,使用NextToken
来查询后面的结果。例如上面的查询返回了3条结果,我们将最大结果数量设置为2,这样总共有两页数据,第一次查询:
aws dynamodb scan \
--table-name Reply \
--filter-expression 'PostedBy = :user' \
--expression-attribute-values '{
":user" : {"S": "User A"}
}' \
--max-items 2 \
--return-consumed-capacity TOTAL
我们看到在返回结果里有个NextToken
字段:
所以可以再次调用scan,在starting-token
参数传入NextToken
:
aws dynamodb scan \
--table-name Reply \
--filter-expression 'PostedBy = :user' \
--expression-attribute-values '{
":user" : {"S": "User A"}
}' \
--max-items 2 \
--starting-token eyJFeGNsdXNpdmVTdGFydEtleSI6IG51bGwsICJib3RvX3RydW5jYXRlX2Ftb3VudCI6IDJ9 \
--return-consumed-capacity TOTAL