比方说,我们有一个表item
,它有一个属性userId
(分区键,字符串)和属性creationTime
(排序键,数字)。我想执行一个查询,该查询从时间t1
到时间t2
的次级索引中提取用户的项目。Dynamodb:为什么主键不能成为过滤器表达式的一部分?
既然不能对同一项目多个范围的条件下,我的想法是,添加的过滤表达式限制结果:
aws dynamodb query --table-name items --index-name userId-creationTime-index --key-condition-expression "userId=:u AND creationTime<=:t1" --filter-expression "creationTime>=:t2" --expression-attribute-values '{":u":{"S":"6f3b581d-8632-4edc-a19d-b77f158d8a23"}, ":t1":{"N":"1456647476000000"}, ":t2":{"N":"1456561076000000"}}'
查询失败,
A client error (ValidationException) occurred when calling the Query operation: Filter Expression can only contain non-primary key attributes: Primary key attribute: creationTime
这感觉很奇怪。不过滤只是在执行查询后限制结果?难道不可能像这样实现像t1 <= creationDate <= t2
这样的条件吗?
找出使用BETWEEN运算符的解决方法。但是,如果任何人都可以解释为什么我不能在过滤表达式中使用相同的属性,那就太棒了! – user331244
亚马逊代表表示这是“[为用户的利益。](https://forums.aws.amazon.com/thread.jspa?threadID=172530)”它仍然不是很清楚为什么用户限制使用关键条件表达式中的所有条件运算符(可在过滤器表达式中使用)。 – rob
当你说二级索引是指本地二级索引?因为在这个例子中这似乎是可能的。 http://docs.amazonaws.cn/zh_CN/amazondynamodb/latest/developerguide/LSI.html#LSI.Querying – strongjz