Neo4j: 如何查询子图

5

我希望从我的neo4j数据库中选择一个子图(S),并在S上使用另一个查询来查找两个给定节点是否相连。有没有一种方法可以在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)
...

谢谢


简短的回答是:“是的”。也许如果您提供一个更长、更具体的问题,您可以得到一个更长的答案 :-). - cybersam
1个回答

8
在您的例子中,您可以使用WITH子句来连接2个MATCH语句,就像这样(稍微整理一下):
MATCH (u:User {username:'test'})-[:adds]->(y:Paper)-[:consistsOf]->(e:L2)-->(m:L3)
WITH m
MATCH p=(m)-[r:gives*1..4]->(n:L3)
...

WITH子句类似于RETURN,但其目的是从一个查询中传递值到下一个查询。在这种情况下,只有'm'被传递,因此第二个MATCH将不会意识到'u'、'y'或'e'。


那么,节点n也来自第一个查询吗?如果不是,我该如何使其来自第一个查询? - user2103008
第 n 个节点继续从第二个 MATCH 语句中得到。 - cybersam
是的,那个可以。我在想是否有办法提高这种情况下的性能。 - user2103008
尝试这个(我不确定会有什么不同,但它更简单):MATCH (:User {username:'test'})-[:adds]->(:Paper)-[:consistsOf]->(:L2)-->(m:L3), p=(m)-[r:gives*1..4]->(n:L3) - cybersam
从你的第一条评论中,我猜测你的意思是n不是m的一部分,对吗?为了更加清晰明了,我想知道如果我想让m和n都与用户test连接,这个查询是否可行。谢谢。 - user2103008
1
是的,这个查询将确保从用户 'test' 到 n,通过 m,存在一条路径。 - cybersam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接