Neo4j-merge-command

提供:Dev Guides
移動先:案内検索

Neo4j-マージコマンド

MERGEコマンドは、CREATEコマンドとMATCHコマンドの組み合わせです。

Neo4j CQL MERGEコマンドは、グラフ内の特定のパターンを検索します。 存在する場合は、結果を返します。

グラフに存在しない場合は、新しいノード/関係を作成し、結果を返します。

この章では、次の方法を学習します-

  • ノードをラベルとマージする
  • ノードとプロパティをマージする
  • OnCreateおよびOnMatch
  • 関係を統合する

構文

MERGEコマンドの構文は次のとおりです。

MERGE (node: label {properties . . . . . . . })

このセクションの例に進む前に、データベースにラベルDhawanとIndの2つのノードを作成します。 以下に示すように、DhawanからIndへのタイプ「BATSMAN_OF」の関係を作成します。

CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"})
CREATE (Ind:Country {name: "India"})
CREATE (Dhawan)-[r:BATSMAN_OF]->(Ind)

ノードとラベルのマージ

MERGE句を使用して、ラベルに基づいてデータベース内のノードをマージできます。 ラベルに基づいてノードをマージしようとすると、Neo4jは指定されたラベルを持つノードが存在するかどうかを確認します。 そうでない場合、現在のノードが作成されます。

構文

以下は、ラベルに基づいてノードをマージする構文です。

MERGE (node:label) RETURN node

例1

次に、ノードをNeo4jにマージするサンプルサイファークエリを示します(ラベルに基づいて)。 このクエリを実行すると、Neo4jはラベルが player のノードがあるかどうかを確認します。 そうでない場合は、「Jadeja」という名前のノードを作成して返します。

指定されたラベルを持つノードが存在する場合、Neo4jはそれらすべてを返します。

MERGE (Jadeja:player) RETURN Jadeja

上記のクエリを実行するには、次の手順を実行します-

ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。

ブラウザアプリ

  • ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。

マージ

結果

実行すると、次の結果が得られます。 データベースに「player」というラベルを持つ「Dhawan」という名前のノードがすでに作成されているため、Neo4jは次のスクリーンショットに示すようにそれを返します。

ダワンプレーヤー

例2

ここで、「CT2013」という名前のノードとTournamentという名前のラベルをマージしてみてください。 このラベルを持つノードがないため、Neo4jは指定された名前のノードを作成して返します。

MERGE (CT2013:Tournament{name: "ICC Champions Trophy 2013"})
RETURN CT2013, labels(CT2013)

上記のクエリを実行するには、次の手順を実行します-

ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。

ブラウザアプリ

  • ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。

マージノード

結果

実行すると、次の結果が得られます。 説明したように、指定されたラベル(トーナメント)を持つノードがないため。 Neo4jは、次のスクリーンショットに示すように、指定されたノードを作成して返します。

トーナメント

ノードとプロパティのマージ

ノードを一連のプロパティとマージすることもできます。 これを行うと、Neo4jは、プロパティを含め、指定されたノードに等しい一致を検索します。 見つからない場合は作成します。

構文

以下は、プロパティを使用してノードをマージする構文です。

MERGE (node:label {key1:value, key2:value, key3:value . . . . . . . . })

以下は、プロパティを使用してノードをマージするサンプルサイファークエリです。 このクエリは、プロパティとラベルを使用して「jadeja」という名前のノードをマージしようとします。 正確なラベルとプロパティを持つそのようなノードはないので、Neo4jはそれを作成します。

MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})
RETURN Jadeja

上記のクエリを実行するには、次の手順を実行します-

ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。

ブラウザアプリ

  • ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。

結合プロパティ

結果

実行すると、次の結果が得られます。 前述のように、指定されたラベルとプロパティを持つノードは存在しないため、次のスクリーンショットに示すように作成されます。

プロパティ結果

OnCreateおよびOnMatch

マージクエリを実行するたびに、ノードが一致するか作成されます。 on createおよびon matchを使用して、ノードが作成または一致したかどうかを示すプロパティを設定できます。

構文

以下は、 OnCreate および OnMatch 句の構文です。

MERGE (node:label {properties . . . . . . . . . . .})
ON CREATE SET property.isCreated ="true"
ON MATCH SET property.isFound ="true"

次に、Neo4jでの OnCreate および OnMatch 句の使用法を示すサンプルサイファークエリを示します。 指定されたノードがデータベースにすでに存在する場合、ノードは一致し、キーと値のペアisFound = "true"のプロパティがノードに作成されます。

指定されたノードがデータベースに存在しない場合、ノードが作成され、その中にキーと値のペアisCreated = "true"を持つプロパティが作成されます。

MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})
ON CREATE SET Jadeja.isCreated = "true"
ON MATCH SET Jadeja.isFound = "true"
RETURN Jadeja

上記のクエリを実行するには、次の手順を実行します-

ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。

ブラウザアプリ

  • ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。

マッチセット

結果

実行すると、次の結果が得られます。 説明したように、詳細が指定されたノードはないため、次のスクリーンショットに示すように、Neo4jは isFound プロパティとともにノードを作成しました。

Oncreate Result

関係をマージする

ノードと同様に、MERGE句を使用して関係をマージすることもできます。

次に、Neo4jのMATCH句を使用して関係をマージするサンプルサイファークエリを示します。 このクエリは、ノード「ind」(ラベル:国と名前:インド)とICC13(ラベル:トーナメントと名前:ICC Champions Trophy 2013)間の WINNERS_OF という名前の関係をマージしようとします。

そのような関係は存在しないため、Neo4jは関係を作成します。

MATCH (a:Country), (b:Tournament)
   WHERE a.name = "India" AND b.name = "ICC Champions Trophy 2013"
   MERGE (a)-[r:WINNERS_OF]->(b)
RETURN a, b

上記のクエリを実行するには、次の手順を実行します-

ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。

ブラウザアプリ

  • ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。

受賞者リスト

結果

実行すると、次の結果が得られます。 指定された関係はデータベースに存在しないため、Neo4jは次のスクリーンショットに示すように関係を作成します。

関係マージ

同様に、複数の関係と無向の関係もマージできます。