2016-12-15 10 views
0

グラフ内のデータベース関係をモデル化しようとしています。ノードのすべてのリレーションシップを含むパスを見つける

image

ブルーノードはオブジェクトを表す:ここに私のプロトタイプからのサンプルグラフです。緑色のノードは、オブジェクト間のリレーションまたはジョインを表します。

あなたは4オブジェクトために取得する必要がある場合、あなたは私がオブジェクト1-3からのパスを照会しようとしている対象物1と3

の両方からの値で参加する必要があります:

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

これは私に2つのパスを与えます。一つは(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

関連する問題