Neo4j 从ID集合中查找公共节点

Neo4j 从ID集合中查找公共节点,neo4j,cypher,Neo4j,Cypher,我有这样的用户连接到聊天节点 (u: User)-[:MEMBER_OF]->(c:Chat) 我需要避免与同一成员多次聊天。 因此,当有人创建群组聊天时,我会检查是否已经没有与相同成员的聊天 最接近的解决办法是 MATCH (member)-[m:MEMBER_OF]->(c:Chat) WHERE member.id IN {members} WITH c.chatId as chatId, count(DISTINCT m) as nbR

我有这样的用户连接到聊天节点

(u: User)-[:MEMBER_OF]->(c:Chat)
我需要避免与同一成员多次聊天。 因此,当有人创建群组聊天时,我会检查是否已经没有与相同成员的聊天

最接近的解决办法是

MATCH (member)-[m:MEMBER_OF]->(c:Chat)
        WHERE member.id IN {members}
        WITH c.chatId as chatId, count(DISTINCT m) as nbR
        WHERE nbR = {nbMembers}
        RETURN chatId
具有成员[122、233、33]和nbMembers.size=3

此解决方案可以找到所有连接到3个成员(但不是全部)的聊天室,但找不到连接到3个成员的聊天室

我也没有找到一种使用ALL或FILTER的方法。

这个怎么样

MATCH (member)-[m:MEMBER_OF]->(c:Chat)
WITH c, member
ORDER BY member.id
WITH c, collect(member.id) AS member_ids
WHERE member_ids = {nbMembers}
RETURN c.chatId

此外,在将nbMembers的值传递给查询之前,您应该对其进行排序

Collect是我想要的,但此查询会引发错误,因为ORDER BY中未定义成员。如果我们将其添加到with子句中,则每个成员都有一行。我的解决方案是使用ALL(m in member_id,其中m in{members}”])对于where子句,我不需要再排序了,我还需要比较数组大小,否则我可以在只查找x,y时找到x,y,z是成员的聊天室,因为x,y在x,y,zGood point中。我还刚刚用一个额外的
编辑了我的问题,我认为这可能会使我的解决方案起作用