質問

私は私のフロントエンドに私のグラフを表示するためにneo4jブラウザの機能をmimcしようとしています。最初の呼び出しでは、ユーザーがクエリボックスに入力したクエリを実行し、2番目の呼び出しでは、最初のユーザーが入力したクエリで返されたすべてのノード間のリレーションシップを検索します。

{
  "statements":[{
    "statement":"START a = node(1,2,3,4), b = node(1,2,3,4)
                 MATCH a -[r]-> b RETURN r;",
    "resultDataContents":["row","graph"],
    "includeStats":true}]
}

私のアプリケーションでは、より効率的になりたいので、すべてのノードと関係を単一のクエリで取得できるようにしたいと思います。私が現在持っているクエリは次のとおりです:

START person = node({personId})
MATCH person-[:RELATIONSHIP*]-(p:Person)
WITH distinct p
MATCH p-[r]-(d:Data), p-[:DETAILS]->(details), d-[:FACT]->(facts)
RETURN p, r, d, details, facts

このクエリはうまく実行されますが、元の「person」にリンクされていた「d」ノードと「details」ノードは表示されません。

私はコレクション内の"p"と"person"の結果に参加しようとしました:

collect(p) + collect(person) AS people 

しかし、これは私が結果のコレクションで一致を実行することを可能にしません。私が理解できる限り、コレクションを分解する方法はありません。

現時点で私が見る唯一のオプションは、クエリを2つに分割することです;「collect(p)+collect(person)AS people」コレクションを返し、2番目のクエリでノード値を使用します。このクエリを実行するより効率的な方法はありますか?

役に立ちましたか?

解決

量指定子を使用する場合 *0.. 関係も0の深さで一致しています person と同じ p この場合。ザ- * 制限が指定されていない場合のデフォルトは 1..infinity

START person = node({personId})
MATCH person-[:RELATIONSHIP*0..]-(p:Person)
WITH distinct p
MATCH p-[r]-(d:Data), p-[:DETAILS]->(details), d-[:FACT]->(facts)
RETURN p, r, d, details, facts
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top