neo4j:如何查询子图

neo4j:如何查询子图,neo4j,cypher,Neo4j,Cypher,我想从我的neo4j数据库中选择一个子图,并使用另一个查询来查找两个给定节点是否连接。有没有办法用neo4j编写查询?我正在使用node.js和Cypher。 编辑: 我正在做类似的事情,例如: Match (u:User)-[:adds]->(y:Paper)-[:consistsOf]->(e:L2)-[]->(m:L3) where u.username = 'test' MATCH p=(m:L3)-[r:gives*1..4]->(n:L3) ... 谢谢在您

我想从我的neo4j数据库中选择一个子图,并使用另一个查询来查找两个给定节点是否连接。有没有办法用neo4j编写查询?我正在使用node.js和Cypher。 编辑: 我正在做类似的事情,例如:

Match (u:User)-[:adds]->(y:Paper)-[:consistsOf]->(e:L2)-[]->(m:L3)
where u.username = 'test'
MATCH p=(m:L3)-[r:gives*1..4]->(n:L3)
...

谢谢在您的示例中,您可以使用WITH子句连接两个匹配语句,如下所示(稍微清理):


WITH子句类似于RETURN,只是它的目的是将值从一个查询传递到下一个查询。在这种情况下,只传递“m”,因此第二个匹配项将不知道“u”、“y”或“e”。

简短的回答是:“是”。也许如果您提供了一个更长、更具体的问题,您可以得到更长的答案:-)。那么,节点n也将来自第一个查询?如果不是,我如何使它来自第一个查询?n节点继续来自第二个匹配语句。是的,这是有效的。我想知道是否有一种方法可以提高这种情况下的性能。试试这个(我不确定它会有什么不同,但它更简单):匹配(:User{username:'test})-[:adds]>(:Paper)-[:consistsOf]>(:L2)-->(m:L3),p=(m)-[r:gives*1..4]>(n:L3)是的,这个查询将确保有一条从用户“test”到n的路径,通过m。
MATCH (u:User {username:'test'})-[:adds]->(y:Paper)-[:consistsOf]->(e:L2)-->(m:L3)
WITH m
MATCH p=(m)-[r:gives*1..4]->(n:L3)
...