amazon-web-services - 不使用主键的 AppSync 解析器查询表/二级索引
问题描述
从官方AWS 文档看来,要在 dynamodb 中查询项目,需要为主键提供一个相等键表达式。但是,AppSync 文档没有明确说明这一点。我想知道在解析器中是否可以在不为索引或表的主键提供相等键表达式的情况下查询 dynamodb?例如,我可以执行以下操作:
primaryKey != 输入
或者干脆完全省略相等表达式并使用其他属性的表达式?
解决方案
可以在不提供主键(或索引)的键条件表达式的情况下从 DynamoDB 中检索记录,但您必须使用该Scan
操作来访问表(或索引)中的每个项目。
AWS 的AppSync 扫描文档中的一个示例:
{
"version" : "2017-02-28",
"operation" : "Scan",
"filter" : {
"expression" : "begins_with(title, :title)",
"expressionValues" : {
":title" : { "S" : "${context.arguments.title}" }
},
}
}
Scan 操作通过访问表或二级索引中的每个项目来返回一个或多个项目和项目属性。要让 DynamoDB 返回更少的项目,您可以提供 FilterExpression 操作。
关于您关于查找与特定主键不匹配的项目的具体问题:
primaryKey != 输入
如果您的 primaryKey 是分区键 + 排序键的组合,则应考虑使用带括号的NOT
和逻辑运算符:AND
{
"version": "2017-02-28",
"operation": "Scan",
"filter": {
"expression": "NOT (#PK = :PK AND #SK = :SK)",
"expressionNames": {"#PK": "PK", "#SK": "SK"},
"expressionValues": {
":PK":{"S":"some-partition-key"},
":SK":{"S":"some-sort-key"}
},
},
"consistentRead": true,
"limit": 10
}
推荐阅读
- python - 通过减去非工作时间来计算流程的有效时间
- fastapi - 我没有看到选项卡:从 PyCharm 运行 FastAPI 应用程序时的 JSON 原始数据标头
- reactjs - 你如何在 React 中为嵌套组件覆盖 CSS 模块?
- c# - sqlcommand.executereader 返回 null
- matlab - 如何保存已编辑的 UItable
- go - Goroutine 神秘结束,channel 没有达到 close 语句就关闭了
- ssrs-2008 - 语句末尾的错误 SSRS 表达式,找不到吗?
- angular - 路由更改时获取路由自定义数据
- python - Moto(mock_s3)不在烧瓶请求中模拟 boto3
- c++ - OpenGL 看不到三角形