3

私のグラフは次のようになります

medium-[:firstChapter]->chapter1-[:nextChapter]->chapter2_to_N

:firstChapter を介して接続されたノードが 1 つだけあり、その後、:nextChapter を介して接続された複数のノードが続く場合があります。

関係 :firstChapter を介して媒体に接続されているか、 :nextChapter を介してあるチャプターから別のチャプターに接続されているすべてのノードを一致させようとしました

私が試したクエリは次のようになります

start n=node(543) match n-[:firstChapter|nextChapter*]->m return m;

node(543) はノード メディアです。驚くべきことに、ノードが n (=中間ノード) に接続されていなくても、このクエリはパス内のすべてのノードを返します。これは正しいようです。

start n=node(543) match n-[:firstChapter|nextChapter*]->m return m;

上記のクエリが n に接続されていないノードを返すのはなぜですか? 私が理解している限り、* 記号は通常、無制限の数のリレーションシップにあるノードを返しますよね?

:firstChapter または :nextChapter を介して開始ノードに接続されているパスのすべてのノードを (1 回だけ) 一致させる最良の方法は何ですか? この場合、すべての章

上記のクエリはその目的を果たしますが、出力が正しいとは思いません...

編集:明確にするためにダイアグラムを追加しました。ご覧のとおり、最初のチャプターには :firstChapter を介してのみアクセスできます。したがって、上記のクエリがすべてのチャプター ノードを返す理由はまだ不明です グラフ図

4

2 に答える 2

2

* 演算子を使用して、クエリは、:firstChapter と :nextChapter (:nextChapter だけでなく) の両方の関係タイプの行に沿ってすべての関係を検索します。node(543) の章データには、543 チェーンにない章ノードへの関係が含まれている可能性があり、クエリはそれらを返しています。

type :nextChapter を使用して開始ノードを最初の章に接続する追加の関係を追加することを検討し、章に存在する関係を確認してください。

次に実行します。

start n=node(543) 
match n-[:nextChapter*]->m 
return m;

それでも追加の結果が得られるかどうかを確認してください。もしそうなら、以下を実行して、追加の関係を持つノードが見つかるまで毎回 n を増やします - (他の方法があると確信していますが!)

start n=node(543) 
match n-[:nextChapter*1..n]->m 
return m;
于 2013-08-12T22:59:29.863 に答える