gpt4 book ai didi

filtering - Graphcool(Graphql): how to make exact filter in array of Id

转载 作者:行者123 更新时间:2023-12-02 04:29:34 25 4
gpt4 key购买 nike

我有聊天模型

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"
}
]
}
]
}
}

最佳答案

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 个用户的聊天。

关于filtering - Graphcool(Graphql): how to make exact filter in array of Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50248246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com