2016-12-15 127 views
0

我想模拟图中的某些数据库关系。下面是从我的原型样品图表:查找包含节点的所有关系的路径

image

蓝节点表示的对象。绿色节点表示对象之间的关系或联接。

如果你需要去反对4,你需要从两个物体1和3

我试图从物体1-3查询路径与价值观的加盟:

match(one:Object {Name: "1"}), 
    (three:Object {Name: "2"}), 
    p = (one)-[RELATES*]-(three) 
RETURN p 

这让我有两条路径,一条是(1)-[a]-(2)-[b]-(3),另一条是(1)-[c]-(3)。后者是无效的,因为图中所有“相关”的边都不在路径中。有没有办法相应地过滤p?

或者,有没有更好的方法来建模关系?我可以将a-> 1,b-> 2,c-> 3,& c-1的边缘表示为FROM,a-> 2,b-> 3和c-> 4作为TO.

+0

“后者无效,因为图中所有'相关'边都不在路径中。” - 你的意思是说,一条路径应该包括从绿色节点开始的所有“关联”边缘?例如,'(1) - [c] - (3)'是无效的,因为它不包含'4'? –

+0

是的,这就是我的意思。有些情况下需要2个或更多的对象来查找另一个对象。这是一个例子,其中“c”关系节点用于获取对象4,这需要一个已经具有1和3的路径。希望这是有道理的。我最初试图用对象节点之间的边(仅限于绿色节点)对此进行建模,但我不明白它如何适应这种情况。 – user2480485

回答

0

如果是有意义的,你的关系的关系模式,那么你可以有这个简单的图表(其中关系具有类型REL):

enter image description here

有了这个数据模型,您可以通过这种方式获得有效的路径:

MATCH p=(:Object {name: '1'})-[:REL*]->(:Object {name: '3'}) 
RETURN p; 
+0

我最初试过这样的模型。我碰到的挑战是你需要对象1和3来达到4.我试图将关系节点放入以促进这些类型的关系。 – user2480485

相关问题