2017-04-08 880 views
-1

我有具有name和id属性的节点。这些节点与其他节点有朋友关系。如{约翰} - [朋友] - > {保罗},{约翰} - [朋友] - > {何塞},{何塞} - [朋友] - > {保罗}查找与Neo4j中的输入节点有特定关系的节点

创建用户

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)); 

现在我正在寻找查询约翰的朋友,这应该列出我保罗和何塞。我怎么做 ?尝试了下面,并得到空的结果。无法弄清楚为什么

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

感谢您的帮助

+1

必须通过[开发手册]您读(https://neo4j.com/docs/developer-manual/3.1/)?这是在文档中详细解释的基本查询功能:在您的开始节点上匹配所需的模式,返回您感兴趣的模式部分。您试图查询的内容到目前为止您尝试过了什么? – InverseFalcon

+0

谢谢@InverseFalcon。用我的方法更新了问题。是啊,看起来像一个选择查询基本,但有点卡住了。任何建议 –

回答

0

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

此外,您还需要确保从比赛中正确的变量中返回参数。

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

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

试试这个:

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

谢谢@InverseFalcon它的作品! –

相关问题