本文主要是介绍查找与Neo4j中的输入节点有特定关系的节点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我有具有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));
必须通过[开发手册]您读(https://neo4j.com/docs/developer-manual/3.1/)?这是在文档中详细解释的基本查询功能:在您的开始节点上匹配所需的模式,返回您感兴趣的模式部分。您试图查询的内容到目前为止您尝试过了什么? – InverseFalcon
谢谢@InverseFalcon。用我的方法更新了问题。是啊,看起来像一个选择查询基本,但有点卡住了。任何建议 –
回答
你需要确保你使用相同的关系类型,您创建的关系时一样。在创建查询中,创建一个:FRIENDS关系,但在后续查询中,您正在寻找一个:FRIEND关系。你需要确保你是一致的。
此外,您还需要确保从比赛中正确的变量中返回参数。
在您的查询中,a
是您的起始节点,因为您提供了该节点的ID,但是您要返回同一节点的ID。我想你的意思是返回actor.id
,它引用比赛另一端的变量。
要记住的另一件事是关系方向。 Neo4j中的所有关系都有一个方向,但是有很多问题你不关心关系的方向,或者你不知道它是朝着哪个方向发展。您的朋友关系就是一个很好的例子,因为当您查询两个用户是否是朋友时,您不会知道或关心方向,因此您可以将方向箭头留在查询中。
试试这个:
session.run("MATCH (a:User{id:{id}})-[:FRIENDS]-(actor) RETURN actor.id", parameters("id", user));
这篇关于查找与Neo4j中的输入节点有特定关系的节点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!