質問

任意であるが特定のノード/関係(NEO4J 2.0 M6)を持つノード間の関係を見つけようとしています。

私のデータモデルでは、 '遺伝子'は 'A'のグループです。私は '遺伝子' - '遺伝子'、 '遺伝子' - 'group'および 'group' - 'group'(モデルイメージの赤い線)の間の関係を「対話」の関係を持っています。

これを「遺伝子」との間のすべての「対話」の関係に煮ることが望みます。直接(Gene-INTERACT-Gene)と1つか2つのグループの(Gene-PARTOF-Group-INTERACT-Gene)


画像の入力ここで


もちろん、これは複数の文字照会で簡単です:

# direct INTERACT
MATCH (g1:Gene)-[r:INTERACT]-(g2:Gene) RETURN g1, g2
# INTERACT via one Group
MATCH (g1:Gene)-[:PARTOF]-(gr:Group)-[r:INTERACT]-(g2:Gene) RETURN g1, g2
# INTERACT via two Group
MATCH (g1:Gene)-[:PARTOF]-(gr1:Group)-[r:INTERACT]-(gr2:Group)-[:PARTOF]-(g2:Gene)
RETURN g1, g2
.

しかし、パス内のオプションの「グループステップ」を受ける単一の文字列クエリを構築することが可能ですか?これまでのところ私はオプションの関係とshortestPathsだけを使いましたが、私は2つの遺伝子の間に1つか2つのオプションのノードをフィルタリングできるかどうかはわかりません。

役に立ちましたか?

解決

パスに追加する関係ごとにゼロの間に深さを割り当てることができます。

のようなものを試してみてください
MATCH (g1:Gene)-[:PARTOF*0..1]-(gr1)-[:INTERACT]-(gr2)-[:PARTOF*0..1]-(g2:Gene) 
RETURN g1,g2
.

と一致したパスが実際にどのように見えるかを確認するには、パス全体を返します。

MATCH p=(g1:Gene)-[:PARTOF*0..1]-(gr1)-[:INTERACT]-(gr2)-[:PARTOF*0..1]-(g2:Gene) 
RETURN p
.

このパターンのオプション部分についてノードラベルを宣言することで少し悩まされます。遺伝子が他のものに[:PARTOF]を持つことができれば、(gr1)はそのものにバインドし、クエリは信頼できません。

のようなWHERE句を追加するだけです。
WHERE gr1:Group AND gr2:Group
.

オプションの部品が一致しない場合を除くので、機能しません(それはあなたの3番目のクエリのようなものです)。私はそれが解決できると確信していますが、あなたの実際のモデルがあなたの質問で説明しているものよりもはるかに複雑ではない場合は、これはそうです。

私はコンソールであなたのモデルを解釈する自由を取りましたここ、それを確認するそれがあなたが望むものをするならば。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top