首页 文章

查找与Neo4j中的输入节点具有特定关系的节点

提问于
浏览
-1

我有名称和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 回答

  • 0

    您需要确保使用与创建关系时相同的关系类型 . 在创建查询中,您创建了一个:FRIENDS关系,但在后续查询中,您正在寻找:FRIEND关系 . 你需要确保你保持一致 .

    此外,您还需要确保从匹配中的正确变量返回参数 .

    在您的查询中, a 是您的起始节点,因为您're supplying the id of that node, but you'返回同一节点的id . 我想你的意思是返回 actor.id ,它引用了匹配另一边的变量 .

    要记住的另一件事是关系方向 . Neo4j中的所有关系都有一个方向,但是有很多查询,你要么不关心这种关系的方向,要么你不知道它是朝着一个方向走向另一个方向 . 你的:FRIENDS关系是一个很好的例子,因为当你查询两个用户是否是朋友时,你不会知道或关心方向,所以你可以将方向箭头从查询中删除 .

    试试这个:

    session.run("MATCH (a:User{id:{id}})-[:FRIENDS]-(actor) RETURN actor.id",
            parameters( "id", user ) );
    

相关问题