首页 > 解决方案 > AppSync - 当数组属性具有与之关联的`@key`指令时,无法使用数组创建架构

问题描述

我最近向@key模式字段添加了一个指令,以便我可以按该字段进行搜索,尽管我现在收到一个错误,暗示先前正确的数据类型不是预期的。它说它需要一个字符串但得到一个列表,尽管该字段是一个包含枚举的列表。

是否可以在不使用的情况下按特定字段查询@key@key如果没有,当(看似)将列表的预期类型更改为字符串时,如何创建记录?

下面是我的代码,我将其添加@keycategories列表中,但现在当我尝试创建新代码时Journey,出现如下所示的错误。

这是架构:

type Journey @model
  @auth(rules: [{ allow: owner, operations: [create, delete, update] }])
  @key(name: "getJourneysByCategories", fields: ["categories"], queryField: "getJourneysByCategories")
  @key(name: "getJourneysByName", fields: ["name"], queryField: "getJourneysByName") {
  id: ID!
  name: String!
  description: String
  coverImage: String
  isPrivate: Boolean!
  members: [JourneyUsersBridge] @connection(name: "JourneyUsers")
  moderators: [JourneyModeratorsBridge] @connection(name: "ModeratedBy")
  creator: User! @connection(name: "JourneyCreator")
  goals: [Goal] @connection(name: "JourneyGoals")
  posts: [Post] @connection(name: "JourneyPosts")
  categories: [JourneyCategory!]!
}

这是用于创建的代码示例Journey

type CreateJourneyInput = {
  name: string;
  description?: string | null;
  coverImage?: string | null;
  isPrivate: boolean;
  categories: Array<JourneyCategory | null>;
  journeyCreatorId: string;
};
const journey: CreateJourneyInput = {
    name: 'My GraphQL Journey',
    description: 'This Journey was made using GraphQL minus DataStore!',
    isPrivate: false,
    categories: [JourneyCategory.EXMAMPLE],
    journeyCreatorId: userId
};
const result = await API.graphql(
    graphqlOperation(mutations.createJourney, { input: journey })
);

这是完整的错误:

"One or more parameter values were invalid: Type mismatch for Index Key categories Expected: S Actual: L IndexName: getJourneysByCategories (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: U4EB7HPO1GU5LHVAOPMGAJJHANVV4KQNSO5AEMVJF66Q9ASUAAJG)"

所以我删除了getJourneysByCategories密钥,上传工作正常。这里发生了什么,为什么?

我只是希望能够通过查询categories- 也许@key不是正确的路线?key 指令是否不适用于列表?

标签: amazon-web-servicesgraphqlaws-appsync

解决方案


推荐阅读