【发布时间】:2018-04-03 09:34:40
【问题描述】:
我正在解决一个问题,我已经将其抽象为:
(a)-[:PREVIOUS]->(b)-[:PREVIOUS]->(c)-[:PREVIOUS]->(d)-[:PREVIOUS]->(e)-[:PREVIOUS]->(f)
(b)-[:IS]->(:Colour {Name: 'Red'})
(c)-[:IS]->(:Colour {Name: 'Red'})
(d)-[:IS]->(:Colour {Name: 'Red'})
(e)-[:IS]->(:Colour {Name: 'Blue'})
(f)-[:IS]->(:Colour {Name: 'Red'})
注意,
(:Colour {Name: 'Red'})
是唯一的并连接到许多节点,例如
(a)-[:IS]->(:Colour {Name: Red})<-[:IS]-(b)
但只有
(e)-[:IS]->(:Colour {Name: Blue})
我正在尝试构建一个数据相关的查询,如上图所示。我想要做的是获取一个节点及其 2 个先前的邻居。但是,有条件:
- 我只想返回共享相同“IS”属性的邻居。
- 如果存在具有不同“IS”属性的邻居,请跳过它。
- 如果节点的先前邻居少于 2 个,则返回 1 个或 0 个邻居。
我已经对此进行了尝试,但无法生成以下输出。上图的 COMPLETE 输出应如下所示:
a, b, c
b, c, d
c, d, f
d, f
e
f
注意,对于节点 (c),我们返回 (d)、(f) 并跳过 (e),因为它是蓝色的; (d) 应该有类似的行为。 (e) 仅返回自身,因为它是唯一的蓝色节点。有谁知道这个问题有没有简单的解决办法?
【问题讨论】: