Суффикс every
в users_every
обеспечивает соответствие всех чатов, в которых есть только пользователи с идентификаторами из массива id_in
. Вот почему вы получаете чаты с меньшим количеством пользователей, потому что подмножества совпадают.
Решение:
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
пользователей.