You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS AppSync中通过用户ID数组查询获取用户对象列表

问题原因

  • 你自定义的getAllFriends查询字段没有配置对应的解析器和数据源,AWS AppSync不会自动为自定义Query生成查询逻辑,无解析器的字段默认返回null。
  • 过滤操作符使用错误:contains是字符串匹配操作符,语义为「字段值包含传入的字符串子串」,无法实现「ID值存在于传入数组」的匹配需求,该场景需要使用in操作符。
  • 自定义输入类型定义和实际传参不匹配:你定义的contains字段为数组类型,但查询时传入的是单个字符串,类型校验本身就不通过。

实现方案

方案一:直接使用Amplify自动生成的查询能力

使用@model指令后Amplify会自动生成listUsers查询,原生支持in过滤,不需要额外开发自定义查询,直接使用即可:

query MyQuery {
  listUsers(filter: {id: {in: ["VALID-USER-ID-1", "VALID-USER-ID-2"]}}) {
    items {
      id
      username
    }
  }
}

方案二:自定义getAllFriends查询

如果需要保留自定义查询字段,按以下步骤修改:

  1. 简化schema定义,复用Amplify原生生成的过滤类型和返回类型,不需要自行编写输入参数定义:
type User @model {
  id: ID!
  username: String!
  friends: [String]
}

type Query {
    getAllFriends(filter: ModelUserFilterInput): ModelUserConnection
}
  1. 在AWS AppSync控制台为getAllFriends字段绑定User表对应的DynamoDB数据源,配置解析器:
  • 请求映射模板:
{
  "version": "2018-05-29",
  "operation": "Scan",
  "filter": #if($context.args.filter) $util.transform.toDynamoDBFilterExpression($context.args.filter) #else null #end
}
  • 响应映射模板:
$util.toJson($context.result)

注意事项

  • in操作符最多支持同时传入100个ID值,超过该数量需要拆分多次查询
  • 如果User表数据量较大,全表扫描+过滤的方式会产生额外的成本和延迟,高频查询场景建议搭配二级索引或者使用@connection指令配置好友关系关联查询。

内容的提问来源于stack exchange,提问作者crayden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:36:05