最近,我阅读了Michal Bachman关于 Neo4j中双向关系的文章 ,他建议对于某些关系类型,我们对关系的方向不那么感兴趣,因此可以在查询时忽略它。 他使用以下示例显示了Neo Technology和GraphAware之间的合作关系:
两家公司都是彼此的合作伙伴,但是由于我们可以尽快找到传入和传出的关系,因此我们最好在两家公司/节点之间只有一种关系。
当我们想使图中的隐式关系明确时,经常会出现这种模式。 例如,我们可能有以下图形描述了他们所从事的人员和项目:
我们可以使用以下密码语法在Neo4j 2.0中创建该图:
CREATE (mark:Person {name: "Mark"})
CREATE (dave:Person {name: "Dave"})
CREATE (john:Person {name: "John"})
CREATE (projectA:Project {name: "Project A"})
CREATE (projectB:Project {name: "Project B"})
CREATE (projectC:Project {name: "Project C"})
CREATE (mark)-[:WORKED_ON]->(projectA)
CREATE (mark)-[:WORKED_ON]->(projectB)
CREATE (dave)-[:WORKED_ON]->(projectA)
CREATE (dave)-[:WORKED_ON]->(projectC)
CREATE (john)-[:WORKED_ON]->(projectC)
CREATE (john)-[:WORKED_ON]->(projectB)
如果我们想弄清楚哪些人彼此认识,我们可以编写以下查询:
MATCH (person1:Person)-[:WORKED_ON]-()<-[:WORKED_ON]-(person2)
RETURN person1, person2
==> +-------------------------------------------------------+
==> | person1 | person2