首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Graphcool (Graphql):如何在Id数组中实现精确的过滤器

Graphcool (Graphql):如何在Id数组中实现精确的过滤器
EN

Stack Overflow用户
提问于 2018-05-09 07:53:58
回答 1查看 637关注 0票数 3

我有聊天模式

代码语言:javascript
复制
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”

代码语言:javascript
复制
query {
  allChats(filter:{
    users_every: {
        id_in: ["123", "234", "345"]
        }
      }
  ){
        id
        users{
         id
        }
      }
}

我得到的回应是这个聊天已经存在了,但是这里我只有两个用户,不是所有的用户。

代码语言:javascript
复制
{
  "data": {
    "allChats": [
      {
        "id": "cjgxuub2351uj0187qeil548m",
        "users": [
          {
            "id": "123"
          },
          {
            "id": "234"
          }
        ]
      }
    ]
  }
}
EN

回答 1

Stack Overflow用户

发布于 2018-05-10 09:21:23

everyusers_every中的后缀确保它匹配只有来自id_in数组的ids的用户的所有聊天。这就是为什么你与更少的用户聊天,因为子集匹配。

解决办法:

代码语言:javascript
复制
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用户的聊天。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50248246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档