gpt4 book ai didi

neo4j - 在 Neo4j 中的多重关系中使用 Where 子句

转载 作者:行者123 更新时间:2023-12-05 00:20:50 26 4
gpt4 key购买 nike

显然,以下 WHERE 子句似乎不起作用,因为我们的查询中有两个关系(WorksAt 和 ResponsibleFor)。如果只有一种关系,那么这将像魔术一样起作用。在下面的查询中,该查询返回了所有系科学类(class),但它不会过滤掉不是由 Maria Smith 教授的类(class)。我想要做的就是只获得在科学系工作的 Maria Smith 教授的类(class)。
我遇到了 WITH 和 Start Clause,它们似乎是潜在的候选子句,可以在将查询的一部分发送到另一部分之前过滤掉它。

http://neo4j.com/docs/stable/query-with.html

但我还没有能够掌握这个概念。有人要帮忙吗?

MATCH (d:Department)<-[w:WorksAt]-(t:Tutor)-[r:ResponsibleFor]->(c:Courses) 
WHERE d.name='Science'
AND t.name='Maria Smith'
return c,r

最佳答案

有多种方法可以给这只特定的猫剥皮。让我们分解一下。

找到在“科学”部门工作的名为“Maria Smith”的导师

MATCH (d:Department)<-[:WorksAt]-(t:Tutor)
WHERE d.name = 'Science' AND t.name = 'Maria Smith'
RETURN t

查找导师教授的类(class)
MATCH (t:Tutor)-[:ResponsibleFor]->(c:Courses)
RETURN t.name, c

把这两个放在一起,得到Scence系的Maria Smith教授的类(class)
MATCH (d:Department)<-[:WorksAt]-(t:Tutor)
WHERE d.name = 'Science' AND t.name = 'Maria Smith'
WITH t
MATCH (t)-[r:ResponsibleFor]->(c:Courses)
RETURN t.name, r, c

这也可以写成
MATCH (d:Department { name : 'Science' })<-[:WorksAt]-(t:Tutor { name : 'Maria Smith' })
WITH t
MATCH (t)-[r:ResponsibleFor]->(c:Courses)
RETURN t.name, r, c

为了最大限度地提高查询性能,您可以使用模式索引快速定位您的 Department 和 Tutor 节点。你在做这个吗?要创建索引使用
CREATE INDEX ON :Department(name)
CREATE INDEX ON :Tutor(name)

分别运行这些行。

顺便说一句,如果您想列出每位导师教授的类(class),如上面第二个查询中所建议的,您可以使用以下查询来汇总每位导师的类(class)。
MATCH (t:Tutor)-[:ResponsibleFor]->(c:Courses)
RETURN t.name as CourseTutor, collect(c.name) as CourseName

希望这可以帮助。

关于neo4j - 在 Neo4j 中的多重关系中使用 Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33564859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com