Cypher Neo4j 创建两个节点之间的关系并避免双向关系

Cypher Neo4j creating Relationship between two nodes and avoiding bidirectional relationship

这是我的查询:

   MATCH (a:Person)-[:friend]->(p:Person)<-[:friend]-(b:Person)
   WITH a, b, COUNT(p) as count
   WHERE count >= 2
   CREATE (a)-[:friend {new: "yes"}]->(b)
   RETURN a,b,count

我试图找到至少有 2 个共同朋友的 a 和 b,并在他们之间建立朋友关系。这是结果示例:

   a             b            count
   name1         name2          3
   name2         name1          3

注意结果是重复的,这将在它们之间创建双向关系。 name1-[:friend]->name2 也意味着 name1<-[:friend]-name2,所以如果我创建双向关系,它们之间的关系将被复制,如我的 csv 文件所示:

   a             b            relationship
   name1         name2           friend
   name1         name2           friend
   name2         name2           friend
   name2         name2           friend

有什么办法可以避免这种情况吗?谢谢你的时间。

是的,有一个技巧可以做到这一点:

MATCH (a:Person)-[:friend]->(p:Person)<-[:friend]-(b:Person)
WHERE ID(a) < ID(b)
WITH a, b, COUNT(p) as count
WHERE count >= 2
CREATE (a)-[:friend {new: "yes"}]->(b)
RETURN a,b,count

变化是WHERE ID(a) < ID(b),确保只选择两个方向之一