【问题标题】:aws appsync combine filter operatorsaws appsync 组合过滤器运算符
【发布时间】:2019-06-22 18:25:50
【问题描述】:

是否可以在 AWS appsync / amplify 中组合过滤运算符,例如:

const filterInput = {
        or:[
          {
          and: [
                  {createdById: { eq: userID }},
                  {chatWithId: { eq: chatWithUser.id }}
                ]
          },
          {
          and:  [
                  {createdById: { eq: chatWithUser.id }},
                  {chatWithId: { eq: userID }}
                ]
          }
        ]
      }

因为对我来说这不是过滤/按预期工作。

【问题讨论】:

  • 您能否提供更多信息?什么没有按预期工作?您没有看到您希望看到的记录吗?我怀疑这可能是由于 DynamoDB 过滤器语义。你读过这个docs.aws.amazon.com/amazondynamodb/latest/developerguide/…吗?
  • 我试图实现的是组合运算符过滤器。所以我想过滤第一个 AND - OR - 在第二个 AND 如果那些不存在而不是返回记录。我不知道是否有可能实现这样的目标以及它如何与 amplify 一起工作,或者我必须找到另一个解决方案。
  • 这将组合过滤器运算符,但是如果满足过滤器表达式的数据分散在您的 DynamoDB 索引中,那么由于 DynamoDB 的语义,Query.listX 可能不会完全按照您的预期返回数据过滤表达式。从提供的详细信息中很难判断,因为我不知道您运行了什么查询以及您得到的结果不是您所期望的。看起来好像您正在尝试建模多对多关系。例如。我想要我参与的所有对话。如果是这种情况,我可以提供建议。
  • 这只是 dynamoDB 中的一个简单表。 Graphql(放大)模式:键入 Chat { id: ID! createdAt:字符串 createdById:字符串 chatWithId:字符串消息:[消息] }

标签: amazon-web-services graphql aws-appsync aws-amplify amplifyjs


【解决方案1】:

感谢您提供额外信息。使用如下所示的 Amplify 架构:

type Chat @model { 
  id: ID! 
  createdAt: String 
  createdById: String 
  chatWithId: String 
  messsages: [Message] 
}

默认情况下,会创建一个带有存储 id 值的 HASH 键的表来存储值,并且无法有效地运行您尝试仅使用默认键结构运行的查询。将来,您将有更多工具可用于控制@model 表的索引结构,但目前唯一的方法是通过@connection。

下面是一个示例架构,可以帮助您开始构建可以更有效地查询这些关系的 API。

ChatQL React schema.graphql

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    相关资源
    最近更新 更多