我有名称和id属性的节点 . 这些节点与其他节点具有友好关系 . 喜欢 - [朋友] - > , - [朋友] - > , - [朋友] - >
创建用户
session.run( "CREATE (a:User {name: {name}, id: {id}})",
parameters( "name", name, "id", id ) );
Build 关系
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 ) );
谢谢您的帮助
1 回答
您需要确保使用与创建关系时相同的关系类型 . 在创建查询中,您创建了一个:FRIENDS关系,但在后续查询中,您正在寻找:FRIEND关系 . 你需要确保你保持一致 .
此外,您还需要确保从匹配中的正确变量返回参数 .
在您的查询中,
a
是您的起始节点,因为您're supplying the id of that node, but you'返回同一节点的id . 我想你的意思是返回actor.id
,它引用了匹配另一边的变量 .要记住的另一件事是关系方向 . Neo4j中的所有关系都有一个方向,但是有很多查询,你要么不关心这种关系的方向,要么你不知道它是朝着一个方向走向另一个方向 . 你的:FRIENDS关系是一个很好的例子,因为当你查询两个用户是否是朋友时,你不会知道或关心方向,所以你可以将方向箭头从查询中删除 .
试试这个: