我有聊天模式
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"
}
]
}
]
}
}发布于 2018-05-10 09:21:23
every在users_every中的后缀确保它匹配只有来自id_in数组的ids的用户的所有聊天。这就是为什么你与更少的用户聊天,因为子集匹配。
解决办法:
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用户的聊天。
https://stackoverflow.com/questions/50248246
复制相似问题