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中。我还刚刚用一个额外的
和编辑了我的问题,我认为这可能会使我的解决方案起作用