0

ノードとリレーションシップが 2 つしかない初歩的なデータベースがあります。match (n) return nneo4j で提供されているローカル Web クライアントでコマンドを実行すると、下の図に示すように、データベースにあるすべてのノードと関係が返されます。

neo4j Web クライアント

ただし、 neo4j-driverモジュールを使用して node.js プロジェクトでまったく同じコマンドを実行すると、3 つのノードのみが返され、2 つの関係は含まれません。

少しいじった後、関係も取得するには、次のようなものを発行する必要があることに気付きましたmatch (n)-[r]-(m) return *。私の最初の質問は、なぜこのような違いがあるのですか? ローカル Web クライアントは、ユーザーを支援するためにもう少し何かをしようとしているだけですか?

さらに、返されたレコード オブジェクトが少しわかりにくいと思います。このmatch (n)-[r]-(m) return *コマンドを実行すると、result.records オブジェクトに 4 つの項目が返されます。そのうちの 2 ~ 2 項目はペアでほぼ同一です。単純化されたビューでは、これが返すものです:

item 0: [Jack node, Jill node, Jack -> Jill relationship]
item 1: [Jill node, Jack node, Jack -> Jill relationship]
item 2: [George node, Jill node, George -> Jill relationship]
item 3: [Jill node, George node, George -> Jill relationship]

したがって、result.records オブジェクトの項目 0 と 1 は、要素の順序のみが異なります。項目 2 と 3 についても同様です。

質問 2 は、Web ページにグラフを表示したい場合、これをどうすればよいですか? 返されたすべての異なる組み合わせで、ノードと関係の一意の ID を探しますか?

質問 3: 私がやろうとしていることを達成するためのより良い方法はありますか?

4

1 に答える 1

2

Neo4j Web ブラウザーは実際に役立つように努めており、ノード間に関係がある場合、視覚化によってノードが接続されます (ところで、この動作をオフにするオプションがあります)。ただし、それらを要求しなかった場合、結果セットにはそれらが含まれません (そうすべきではないため)。ブラウザーで他の応答タブ (テーブル、テキスト、コード) を見て、実際の結果セットを確認します。

このクエリはあなたを助けるかもしれません:

match p=(n)-[r]-(m) return p

しかし、はい、あなたは正しいです。独自の解釈を行うには、アプリケーションで結果をアンパックする必要があります。これは、かなりの数の Neo4j ユーザーが直面する、要求どおりの結果が得られるという問題です。これは、Cypher が非常に多くの異なるもの (表形式の結果、ノード、ノードと関係、パス、サブグラフなど) を返すことができ、ドライバーがそれらすべてを提供する必要があるためです。

ブラウザーの [コード] タブを見て、アプリケーションが何を処理する必要があるかを把握してください (実際に得られるものは、選択したアプリケーション言語によって異なります)。難しくはありませんが、少し慣れが必要です。

お役に立てれば。

よろしく、トム

このような一般的なクエリでは、結果の PS Doubles が予想されます。Neo4j はパターン マッチングを行い、パターンにはリレーションシップの方向がなく、ラベルやリレーションシップ タイプもありません。これは、たとえば (jill)-[:nominated]-(jack) など、かなりの数の一致を返しますが、明らかに (jack)-[:nominated]-(jill) にも一致します。両方ともパターンに一致します。DISTINCT を使用すると少しは役立つかもしれませんが、実際にはパターンをより明確にする必要があります。

于 2018-05-30T07:59:56.767 に答える