【问题标题】:Graphcool (Graphql): how to make exact filter in array of IdGraphcool(Graphql):如何在 Id 数组中进行精确过滤
【发布时间】:2018-10-19 06:27:42
【问题描述】:

我有聊天模型

type Chat @model {
    id: ID! @isUnique
    name: String
    messages: [Message!]! @relation(name: "ChatMessages")
    users: [User!]! @relation(name: "ChatUser")
    createdAt: DateTime!
}

我创建了一个与两个人 ["123", "234"] 的聊天,一切正常。但是当我想与三个人创建一个新的群聊时,其中两个人已经和自己聊天["123", "234", "345"] 我查询一下这个聊天是否与三个人存在

query {
  allChats(filter:{
    users_every: {
        id_in: ["123", "234", "345"]
        }
      }
  ){
        id
        users{
         id
        }
      }
}

我得到回复说这个聊天已经存在,但这里我只有两个用户,而不是全部

{
  "data": {
    "allChats": [
      {
        "id": "cjgxuub2351uj0187qeil548m",
        "users": [
          {
            "id": "123"
          },
          {
            "id": "234"
          }
        ]
      }
    ]
  }
}

【问题讨论】:

    标签: filtering graphql graphcool


    【解决方案1】:

    users_every 中的 every 后缀确保它匹配所有只有具有来自 id_in 数组的 id 的用户的聊天。这就是您与更少用户聊天的原因,因为子集匹配。

    解决办法:

    query {
      allChats(
        filter: {
          AND: [
            { users_some: { id: "123" } },
            { users_some: { id: "234" } },
            { users_some: { id: "345" } },
            { users_every: { id_not_in: ["678", "910", ...] } }
          ]
        }
      ) {
        id
        users {
          id
        }
      }
    }
    

    users_some 过滤器确保选择至少包含所有这 3 个用户的聊天。需要users_every - id_not_in 来排除与这三个以及任何其他用户的聊天。

    老实说,这对我来说似乎有点令人费解,对于拥有大量用户的应用来说可能有点不可行。我希望 graph.cool 在 api 中实现一些更简单的解决方案。

    作为替代方案,您可以省略 users_every 过滤器,然后在您的客户端应用程序中,仅从结果中选择恰好具有 3 用户的聊天。

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 2021-02-09
      • 2021-12-17
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 2018-04-14
      • 1970-01-01
      相关资源
      最近更新 更多