Graphcool(Graphql):如何在 Id 数组中进行精确过滤
Posted
技术标签:
【中文标题】Graphcool(Graphql):如何在 Id 数组中进行精确过滤【英文标题】:Graphcool (Graphql): how to make exact filter in array of 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"
]
]
【问题讨论】:
【参考方案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
用户的聊天。
【讨论】:
以上是关于Graphcool(Graphql):如何在 Id 数组中进行精确过滤的主要内容,如果未能解决你的问题,请参考以下文章
graphql/graphcool:如何编写一个连接一对一和一对多关系的突变
在 Graphcool / GraphQL 中发布更新突变时如何“更新”数组/嵌套字段?
使用 *ngFor (angular + apollo + graphcool) 获取用户的帖子