我的图表结构如下:
我需要直接(红色路径)或通过他们:Treasure
(蓝色)返回所有:FOUND_BY
不是:User
超过1 :Group
的所有回报路径)。
我的密码
MATCH (t:Treasure)
// WHERE with other conditions
WITH t, SIZE((t)-[:FOUND_BY|MEMBER_OF*1..2]-(:User))) as finders
WHERE finders < 2
RETURN t
返回我正在寻找的节点,但是花费了大量时间来扩展该变量路径。 我怎样才能优化这个cypher,摆脱变量路径,但保持相同的结果?
答案 0 :(得分:0)
好像你可以做到
MATCH (t:Treasure)
WHERE size((t)-[:FOUND_BY]->()) < 2
RETURN t
您可以省略[:FOUND_BY]
关系另一侧的标签,以便考虑这两种情况。如果我误解了,请告诉我。
编辑:根据您的评论,我认为避免可变长度路径的最佳方法是:
MATCH (t:Treasure)
WHERE size((t)-[:FOUND_BY]->(:User)) +
size((t)-[:FOUND_BY]->(:Group)<-[:MEMBER_OF]-(:User)) < 2
RETURN t