我们有一些人(例如70人)和一些桌子(例如4个桌子)。人们在每张桌子上互相拜访。 (例如,表的容量为20、20、20、10)。
在第一次会议之后,他们站起来,然后再次随机坐下。我们有特定数量的会话,例如3个会话。我用一个图形对这个过程进行了建模。节点是人员和表,关系是[SITS_ON]。例如:
(p:Person)-[SITS_ON{session:2}]->(t:Table)
表示人员p在会话2中位于表t上。
现在,我需要在此过程中查找碰撞次数。我想知道人们已经拜访了多少次,再次拜访对方。在会话1中,人A坐在表t1上。在会话1中,人B坐在表t1上。在会话2中,人A坐在表t3上。人B在会话2中坐在表t3上,所以发生了冲突。我想知道给定图中的碰撞次数
答案 0 :(得分:0)
请注意,如果要缩放此示例,则需要完善此示例,但是您要做的就是根据您的碰撞标准来匹配成对的人,然后计算发生的次数。由于您不会将第一个碰撞算作碰撞,因此您要做的就是从最终计数中减去1。
MATCH (p1:Person)-[r1:SITS_ON]->(t:Table)<-[r2:SITS_ON]<-(p2:Person)
WHERE ID(p1) < ID(p2) // Remove Cartesian Product/redundancy
AND r1.session == r2.session // Collision if table and session match
RETURN p1.name, p2.name, count(*)-1 as collisions