【问题标题】:Find nodes that has a particular relationship with the input node in Neo4j在 Neo4j 中查找与输入节点有特定关系的节点
【发布时间】:2017-04-08 21:01:26
【问题描述】:

我有具有 name 和 id 属性的节点。这些节点与其他节点有朋友关系。喜欢 {John}-[Friend]->{Paul},{John}-[Friend]->{Jose},{Jose}-[Friend]->{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 的朋友,它应该列出我 paul 和 jose。我怎么做 ?尝试了以下并得到空结果。不知道为什么

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

感谢您的帮助

【问题讨论】:

  • 你读过developer's manual吗?这是文档中很好解释的基本查询功能:在您的起始节点上匹配所需的模式,返回您感兴趣的模式部分。到目前为止,您在尝试查询时尝试了什么?跨度>
  • 感谢@InverseFalcon。用我的方法更新了问题。是的,看起来很基本,就像一个选择查询,但有点卡住了。任何建议

标签: neo4j spring-data-neo4j


【解决方案1】:

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

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

在您的查询中,a 是您的起始节点,因为您提供了该节点的 ID,但您返回的是同一节点的 ID。我想你的意思是返回actor.id,它引用了匹配另一端的变量。

要记住的另一件事是关系方向。 Neo4j 中的所有关系都有一个方向,但是在许多查询中,您要么不关心关系的方向,要么不知道它是否朝着一个方向或另一个方向发展。您的 :FRIENDS 关系就是一个很好的例子,因为当您查询两个用户是否是朋友时,您不会知道或关心方向,因此您可以将方向箭头排除在查询之外。

试试这个:

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

【讨论】:

    猜你喜欢
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 2016-03-12
    • 1970-01-01
    相关资源
    最近更新 更多