我有聊天模型
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"
}
]
}
]
}
}
答案 0 :(得分:0)
every
中的users_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
个用户的聊天。