Neo4j Cypher で WITH を介して個別のノードを渡す

アフシン

次のクエリがあり、WITH で接続された 3 つの MATCHES があり、3 つのパスを検索しています。

MATCH (:File {name: 'A'})-[:FILE_OF]->(:Fun {name: 'B'})-->(ent:CFGEntry)-[:Flows*]->()-->(expr:CallExpr {name: 'C'})-->()-[:IS_PARENT]->(Callee {name: 'd'}) 
WITH expr, ent 

MATCH (expr)-->(:Arg {chNum: '1'})-->(id:Id) 
WITH id, ent

MATCH (entry)-[:Flows*]->(:IdDecl)-[:Def]->(sym:Sym) 
WHERE id.name = sym.name 
RETURN id.name

このクエリは、2 つの異なる ID と 1 つの異なるエントリ、および 7 つの異なる sym を返します。

問題は、2 番目の MATCH で「WITH id, entry」を渡し、2 つの異なる ID が見つかったため、エントリの 2 つのインスタンスが 1 ではなく 3 番目の一致に渡され、3 番目の一致の実行時間が不必要に 2 倍になることです。少なくとも。

エントリの 1 つのインスタンスだけを使用するために、このクエリをどのように記述すればよいか知っている人がいるかどうか疑問に思っています。

インバースファルコン

ID を集約するのが最善の策ですが、それに応じてクエリの 3 番目の部分でロジックを調整する必要があります。

MATCH (:File {name: 'A'})-[:FILE_OF]->(:Fun {name: 'B'})-->(ent:CFGEntry)-[:Flows*]->()-->(expr:CallExpr {name: 'C'})-->()-[:IS_PARENT]->(Callee {name: 'd'}) 
WITH expr, ent 

MATCH (expr)-->(:Arg {chNum: '1'})-->(id:Id) 
WITH collect(id.name) as names, ent

MATCH (entry)-[:Flows*]->(:IdDecl)-[:Def]->(sym:Sym) 
WHERE sym.name in names 
RETURN sym.name

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Neo4j Cypherで個別のノードペアを返す方法は?

分類Dev

neo4j cypher、ノードを検索し、IDによる関係です

分類Dev

Neo4JでCypherを使用してノード間の拡張パスをクエリする方法は?

分類Dev

Neo4j cypherクエリ:COLLECT(S)でORDERBYを使用

分類Dev

Cypherでの複数の一致-Neo4j

分類Dev

Neo4j と Cypher での論理操作の短縮

分類Dev

jQueryを使用してNeo4jでCypherクエリを実行する

分類Dev

単一のクエリでCypher / Neo4Jのノード数を比較する

分類Dev

neo4j cypherのノードラベルで結果をフィルタリングする方法は?

分類Dev

Neo4j、Cypherのリストで文字列の位置を見つけます

分類Dev

Cypher / Neo4Jで構成と集約の関係を作成する

分類Dev

Swift Neo4j Cypher Query内で変数を引用符で囲む方法は?

分類Dev

Neo4J / Cypherクエリの支援

分類Dev

neo4j cypher、収集時にノードではなくフィールドを返す

分類Dev

Neo4j / Cypherで複合オブジェクトを返す方法

分類Dev

Neo4j Cypher:結果を度でフィルタリング

分類Dev

neo4j cypher-クエリ[400]を実行できません、 'StackOverflowError'例外

分類Dev

Neo4j Cypher:一致したノードのセット間で共通のノードを検索します

分類Dev

Neo4j / Cypher:StringArrayの最後のアイテムを抽出します(これはneo4jがそれを呼んだものです)

分類Dev

JavaでCypherクエリを使用して、Neo4Jデータベースの2つのノード間に関係を作成できません

分類Dev

Cypherを使用してNeo4jの単語間の関係をプログラムで作成する

分類Dev

Python RestAPIを使用してneo4jでCypherクエリの応答を取得する方法

分類Dev

Neo4j cypher:インデックス式としてスカラー関数を使用できますか?

分類Dev

Neo4j(cypher):特定の関係を持つすべてのノードを見つけるにはどうすればよいですか?

分類Dev

Neo4J(Cypher)でのグラフノード関係の最良のアプローチ

分類Dev

Cypherを使用して組み込みNeo4Jアプリケーションでノードを作成する

分類Dev

Neo4j Cypher:重複ノードをマージ

分類Dev

Neo4j、Cypher:ソートされたリンクリストの形式でグラフ内の既存のノードを接続します

分類Dev

Neo4jは、実行中のCypherクエリで1つのコアのみを使用します

Related 関連記事

  1. 1

    Neo4j Cypherで個別のノードペアを返す方法は?

  2. 2

    neo4j cypher、ノードを検索し、IDによる関係です

  3. 3

    Neo4JでCypherを使用してノード間の拡張パスをクエリする方法は?

  4. 4

    Neo4j cypherクエリ:COLLECT(S)でORDERBYを使用

  5. 5

    Cypherでの複数の一致-Neo4j

  6. 6

    Neo4j と Cypher での論理操作の短縮

  7. 7

    jQueryを使用してNeo4jでCypherクエリを実行する

  8. 8

    単一のクエリでCypher / Neo4Jのノード数を比較する

  9. 9

    neo4j cypherのノードラベルで結果をフィルタリングする方法は?

  10. 10

    Neo4j、Cypherのリストで文字列の位置を見つけます

  11. 11

    Cypher / Neo4Jで構成と集約の関係を作成する

  12. 12

    Swift Neo4j Cypher Query内で変数を引用符で囲む方法は?

  13. 13

    Neo4J / Cypherクエリの支援

  14. 14

    neo4j cypher、収集時にノードではなくフィールドを返す

  15. 15

    Neo4j / Cypherで複合オブジェクトを返す方法

  16. 16

    Neo4j Cypher:結果を度でフィルタリング

  17. 17

    neo4j cypher-クエリ[400]を実行できません、 'StackOverflowError'例外

  18. 18

    Neo4j Cypher:一致したノードのセット間で共通のノードを検索します

  19. 19

    Neo4j / Cypher:StringArrayの最後のアイテムを抽出します(これはneo4jがそれを呼んだものです)

  20. 20

    JavaでCypherクエリを使用して、Neo4Jデータベースの2つのノード間に関係を作成できません

  21. 21

    Cypherを使用してNeo4jの単語間の関係をプログラムで作成する

  22. 22

    Python RestAPIを使用してneo4jでCypherクエリの応答を取得する方法

  23. 23

    Neo4j cypher:インデックス式としてスカラー関数を使用できますか?

  24. 24

    Neo4j(cypher):特定の関係を持つすべてのノードを見つけるにはどうすればよいですか?

  25. 25

    Neo4J(Cypher)でのグラフノード関係の最良のアプローチ

  26. 26

    Cypherを使用して組み込みNeo4Jアプリケーションでノードを作成する

  27. 27

    Neo4j Cypher:重複ノードをマージ

  28. 28

    Neo4j、Cypher:ソートされたリンクリストの形式でグラフ内の既存のノードを接続します

  29. 29

    Neo4jは、実行中のCypherクエリで1つのコアのみを使用します

ホットタグ

アーカイブ