1

2 つのムービー ノード間の関係を示す暗号クエリを作成しました。

MATCH (m1:Movie)-[r*1..2]-(m2:Movie)
where m1.movieID = '1' AND m2.movieID = '2'
RETURN r
LIMIT 25

これは Neo4j ブラウザーで返されます。これは、まさに私が d3.js で作成したいものです。最終的には movieID がパラメーターになるため、結果はムービーのペアごとに異なります。

ここに画像の説明を入力

ここで見られるNeo4j-core Ruby の例に従って、独自のグラフを作成しましたが、問題は、2 つの移動間でノード (つまり/ノードRETURN) を共有できないことです。TagCountry

この問題を解決するにはどうすればよいですか? 2 つの映画を返すクエリと、それらの共通ノードを返す別のクエリを作成する必要がありますか? この後者のクエリはどのように記述すればよいでしょうか? この関係をどのように視覚化できるか、本当に困っています...

4

2 に答える 2

2

おそらく、今の関係ではなく、パスを一致させてみてください。何かのようなもの:

MATCH p=(m1:Movie { movieID: 1 } )-[r*1..2]-(m2:Movie { movieID: 2 } )
RETURN p;

その後、パス オブジェクトでコレクション関数を使用して、p好きなことを行うことができます。たとえば、内側のノードを取得する場合はnodes(p)、最初と最後のノード ( m1and m2) を使用して単純に削除し、パスに沿ってノードを取得できます。

于 2016-03-01T12:30:48.760 に答える
0

次の関係を持つ映画を返すことができます。

MATCH (m1:Movie)-[r*1..2]-(m2:Movie)
WHERE m1.movieID = '1' AND m2.movieID = '2'
RETURN m1, m2, r
LIMIT 25

それはあなたに重複を与えるかもしれませんが。これを D3 で表示する場合は、関連するすべての関係とその開始/終了ノードが必要になるでしょう。それを行うには、次のことができます。

MATCH (m1:Movie)-[rels*1..2]-(m2:Movie)
WHERE m1.movieID = '1' AND m2.movieID = '2'
RETURN rels
UNWIND rels AS r
WITH DISTINCT r AS rel
WITH startnode(rel) AS startnode, endnode(rel) AS endnode, rel
LIMIT 25

一般に、最終的に必要なのは、関連するノードと関係のコレクションです。したがって、そのクエリの結果を使用して、次のようにすることができます。

result = neo4j_session.query(query_string)

data = {nodes: [], relationships: []}
result.each do |row|
  data[:nodes] << row.startnode
  data[:nodes] << row.endnode
  data[:relationships] << row.rel
end

data[:nodes].uniq!
于 2016-03-01T12:41:15.123 に答える