我不明白如何返回关系的所有可用配置。这可能很容易,但我无法绕过它。
例如,给定:
e.g
CREATE (:STARTER{name: 'start'}), (:ENDER{name: 'end'})
CREATE (:Upstream{name: 'A'}), (:Upstream {name: 'B'}), (:Upstream {name: 'C'})
CREATE (:Downstream {name: '1'}),(:Downstream {name: '2'}),(:Downstream {name: '3'})
MATCH(s:STARTER), (u:Upstream)
CREATE (s)-[:owns]->(u)
MATCH(e:ENDER), (d:Downstream)
CREATE (e)-[:owns]->(d)
MATCH(a:Upstream {name: 'A'}), (d:Downstream)
CREATE (a)-[:related]->(d)
MATCH(b:Upstream {name: 'B'}), (d:Downstream)
CREATE (b)-[:related]->(d)
MATCH(c:Upstream {name: 'C'}), (d:Downstream)
CREATE (c)-[:related]->(d)
我想从上游节点返回下游节点可用的所有配置(如果它们是相关的)(为了方便起见,它们在示例中都是相关的)
在此示例中,必须始终使用DOWNSTREAM 1,2和3。回报看起来像是相关的
Downstream 1 | Downstream 2 | Downstream 3
__________________________________________
Upstream A | Upstream A | Upstream A
Upstream A | Upstream A | Upstream B
Upstream A | Upstream A | Upstream C
Upstream A | Upstream B | Upstream A
Upstream A | Upstream B | Upstream B
Upstream A | Upstream B | Upstream C
Upstream A | Upstream C | Upstream A
Upstream A | Upstream C | Upstream B
Upstream A | Upstream C | Upstream C
Upstream B | Upstream A | Upstream A
....
Upstream C | Upstream C | Upstream C
我开始时:
MATCH (s:STARTER)-[:owns]->(u:Upstream)
WITH s, u
MATCH (e:ENDER)-[:owns]->(d:Downstream)<-[:related]-(u)
但说实话,我不知道下一步该做什么。任何人都可以提供见解吗?
编辑:感谢@Dom Weldon,因为我忘记了这个名字。我正在寻找笛卡尔积
答案 0 :(得分:1)
我不太确切地知道你在这里寻找什么,因为我不确定表中提到的组合是什么,但是,它听起来像你&#39;重新寻找是一种查找两个节点之间所有路径的方法。为此,您将运行以下查询。
MATCH p=((s:STARTER{name: 'start'})-[:owns|related]-(e:ENDER{name: 'end'}))
RETURN p
这应该会给你你想要的东西。否则,您可能希望构建一个笛卡尔积,这对于图数据库来说并不常见。
答案 1 :(得分:1)
Neo4j中的列(变量)对我来说不是动态的,所以你必须要明确。
这样的事情会起作用吗?
MATCH (:Downstream{name:'1'})<-[:related]-(u1)
MATCH (:Downstream{name:'2'})<-[:related]-(u2)
MATCH (:Downstream{name:'3'})<-[:related]-(u3)
RETURN u1, u2, u3
ORDER BY u1.name, u2.name, u3.name
您可以根据需要为列添加别名,但是u1将对应于下游1的上游节点,依此类推2和3。