Next.js中AWS Amplify GraphQL多输入参数查询匹配记录问题
问题解决步骤
首先明确你需要的是通过userId(分区键)+projectId(排序键)组成的复合二级索引实现精准查询,按以下步骤调整即可:
1. 修正Schema定义
根据你使用的Amplify GraphQL Transformer版本选择对应写法:
👉 Transformer V1(旧版)写法
type Project @model @key( name: "byUserIdAndProjectId" fields: ["userId", "projectId"] queryField: "projectByUserIdandProjectId" ) { id: ID! userId: ID! projectId: ID! }
注意:修改@key的name属性避免和旧索引冲突导致缓存问题
👉 Transformer V2(当前默认新版)写法
V2版本已废弃@key指令,改用@index实现二级索引:
type Project @model @index( name: "byUserIdAndProjectId" sortKeyFields: ["projectId"] queryField: "projectByUserIdandProjectId" ) { id: ID! userId: ID! projectId: ID! }
这里默认将userId作为索引的分区键,projectId作为排序键,复合后可唯一锁定单条记录。
2. 同步配置到云端
修改完schema后必须执行以下操作,否则变更不会生效:
- 运行本地编译命令校验语法:
amplify api gql-compile - 推送变更到AppSync云端:
amplify push - 若前端使用自动生成的查询文件,推送完成后执行
amplify codegen更新本地查询语句
3. 验证效果
推送完成后重新进入Amplify查询控制台,找到projectByUserIdandProjectId查询,即可看到需要同时传入userId和projectId两个参数,查询会直接返回同时匹配两个字段的唯一记录,无需额外过滤。
如果不需要自定义查询,也可以直接使用原生listProjects查询,添加同时匹配userId和projectId的filter参数即可实现相同效果,但性能低于二级索引查询,适合小数据量场景。
内容的提问来源于stack exchange,提问作者hellomello
相关产品推荐
相关产品推荐

