从id集合中查找公共节点

时间:2014-12-26 16:57:03

标签: 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
        WHERE nbR = {nbMembers}
        RETURN chatId

成员[122,233,33]和nbMembers members.size = 3

此解决方案找到与3个成员(但不是所有成员)连接的所有聊天记录,它找不到与3个成员连接的聊天。

我也找不到ALL或FILTER的方式。

1 个答案:

答案 0 :(得分:1)

这个怎么样?

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传递给查询之前对其进行排序