我有名称和id属性的节点。这些节点与其他节点具有友好关系。喜欢{John} - [朋友] - > {Paul},{John} - [朋友] - > {Jose},{Jose} - [朋友] - > {Paul}
创建用户
session.run( "CREATE (a:User {name: {name}, id: {id}})",
parameters( "name", name, "id", id ) );
创建关系
session.run("MATCH (a:User),(b:User) WHERE a.id = {node1} AND b.id = {node2} CREATE (a)-[r:FRIENDS]->(b)",
parameters( "node1", id1, "node2", id2 ) );
现在我正在寻找John的朋友,这应该列出我保罗和jose。我怎么做 ?尝试以下并得到空的结果。无法弄清楚为什么
session.run("MATCH (a:User{id:{id}})<-[:FRIEND]-(actor) RETURN a.id",
parameters( "id", user ) );
感谢您的帮助
答案 0 :(得分:0)
您需要确保使用与创建关系时相同的关系类型。在创建查询中,您创建了一个:FRIENDS关系,但在后续查询中,您正在寻找:FRIEND关系。你需要确保你保持一致。
另外,您需要确保从匹配中的正确变量返回参数。
在您的查询中,a
是您的起始节点,因为您提供了该节点的ID,但您返回的是同一节点的ID。我想你的意思是返回actor.id
,它引用了匹配另一边的变量。
要记住的另一件事是关系方向。 Neo4j中的所有关系都有一个方向,但是有很多查询,你要么不关心这种关系的方向,要么你不知道它是朝哪个方向发展。你的:FRIENDS关系是一个很好的例子,因为当你查询两个用户是否是朋友时,你不会知道或关心方向,所以你可以将方向箭头从你的查询中删除。
试试这个:
session.run("MATCH (a:User{id:{id}})-[:FRIENDS]-(actor) RETURN actor.id",
parameters( "id", user ) );