Neo4j-quick-guide
Neo4j-概要
Neo4jは、Javaテクノロジを使用して開発された世界有数のオープンソースグラフデータベースです。 非常にスケーラブルでスキーマフリーです(NoSQL)。
グラフデータベースとは
グラフは、オブジェクトのいくつかのペアがリンクで接続されているオブジェクトのセットの図的表現です。 ノード(頂点)と関係(エッジ)の2つの要素で構成されます。
グラフデータベースは、グラフ形式でデータをモデル化するために使用されるデータベースです。 ここでは、グラフのノードはエンティティを表し、関係はこれらのノードの関連付けを表します。
人気のあるグラフデータベース
Neo4jは人気のあるグラフデータベースです。 他のグラフデータベースは、Oracle NoSQLデータベース、OrientDB、HypherGraphDB、GraphBase、InfiniteGraph、およびAllegroGraphです。
グラフデータベースを使用する理由
今日、データのほとんどは異なるオブジェクト間の関係の形で存在し、多くの場合、データ間の関係はデータ自体よりも価値があります。
リレーショナルデータベースは、同じタイプのデータを格納する複数のレコードを持つ高度に構造化されたデータを格納するため、構造化データの格納に使用でき、データ間の関係は格納しません。
他のデータベースとは異なり、グラフデータベースは関係と接続をファーストエンティティとして保存します。
グラフデータベースのデータモデルは、他のデータベースと比較して単純であり、OLTPシステムで使用できます。 トランザクションの整合性や運用の可用性などの機能を提供します。
RDBMS対グラフデータベース
以下は、リレーショナルデータベースとグラフデータベースを比較する表です。
Sr.No | RDBMS | Graph Database |
---|---|---|
1 | Tables | Graphs |
2 | Rows | Nodes |
3 | Columns and Data | Properties and its values |
4 | Constraints | Relationships |
5 | Joins | Traversal |
Neo4jの利点
Neo4jの利点は次のとおりです。
- 柔軟なデータモデル-Neo4jは、柔軟でシンプルかつ強力なデータモデルを提供します。これは、アプリケーションや業界に応じて簡単に変更できます。
- リアルタイムの洞察-Neo4jは、リアルタイムのデータに基づいて結果を提供します。
- 高可用性-Neo4jは、トランザクションが保証された大規模なエンタープライズリアルタイムアプリケーションで高可用性を提供します。
- 接続および半構造データ-Neo4jを使用すると、接続および半構造データを簡単に表現できます。
- 簡単な検索-Neo4jを使用すると、他のデータベースと比較して、接続されたデータをより速く表現するだけでなく、簡単に検索(トラバース/ナビゲート)することもできます。
- * Cypherクエリ言語*-Neo4jは、ascii-art構文を使用してグラフを視覚的に表現する宣言クエリ言語を提供します。 この言語のコマンドは人間が読める形式であり、非常に簡単に習得できます。
- 結合なし-Neo4jを使用すると、結合またはインデックスなしで隣接ノードまたは関係の詳細を取得するのが非常に簡単なので、接続/関連データを取得するために複雑な結合を必要としません。
Neo4jの機能
Neo4jの注目すべき機能は次のとおりです-
- データモデル(柔軟なスキーマ)-Neo4jは、ネイティブプロパティグラフモデルという名前のデータモデルに従います。 ここで、グラフにはノード(エンティティ)が含まれており、これらのノードは相互に接続されています(関係によって示されています)。 ノードと関係は、プロパティと呼ばれるキーと値のペアでデータを保存します。 + Neo4jでは、固定スキーマに従う必要はありません。 要件ごとにプロパティを追加または削除できます。 また、スキーマの制約も提供します。
- * ACIDプロパティ*-Neo4jは、完全なACID(原子性、一貫性、分離、および耐久性)ルールをサポートしています。
- スケーラビリティと信頼性-クエリの処理速度とデータの整合性に影響を与えることなく、読み取り/書き込みの数とボリュームを増やすことで、データベースをスケーリングできます。 Neo4jは、データの安全性と信頼性のための*レプリケーション*のサポートも提供します。
- * Cypherクエリ言語*-Neo4jは、Cypherとして知られる強力な宣言型クエリ言語を提供します。 グラフの描画にASCIIアートを使用します。 Cypherは簡単に習得でき、Joinsなどの複雑なクエリを使用せずにデータ間の関係を作成および取得するために使用できます。
- ビルトインウェブアプリケーション-Neo4jはビルトイン* Neo4jブラウザ*ウェブアプリケーションを提供します。 これを使用して、グラフデータを作成およびクエリできます。
- ドライバー-Neo4jは以下で動作します-
- Java、Spring、Scalaなどのプログラミング言語で動作するREST API
- Node JSなどのUI MVCフレームワークで動作するJavaスクリプト。
- Javaアプリケーションを開発するために、Cypher APIとNative Java APIの2種類のJava APIをサポートしています。 これらに加えて、MongoDB、Cassandraなどの他のデータベースを使用することもできます。
- インデックス作成-Neo4jは、Apache Lucenceを使用してインデックスをサポートします。
Neo4j-データモデル
Neo4jプロパティグラフデータモデル
Neo4jグラフデータベースは、プロパティグラフモデルに従ってデータを保存および管理します。
以下は、プロパティグラフモデルの主要な機能です-
- モデルは、ノード、関係、プロパティのデータを表します
- プロパティはキーと値のペアです
- ノードは円を使用して表され、関係は矢印キーを使用して表されます
- 関係には方向があります:単方向および双方向
- 各関係には、「開始ノード」または「開始ノード」および「終了ノード」または「終了ノード」が含まれます。
- ノードと関係の両方にプロパティが含まれています
- 関係はノードを接続します
プロパティグラフデータモデルでは、関係は方向性がある必要があります。 指示なしで関係を作成しようとすると、エラーメッセージがスローされます。
Neo4jでも、関係は方向性を持つ必要があります。 指示なしに関係を作成しようとすると、Neo4jは「関係は方向性があるはずです」というエラーメッセージをスローします。
Neo4jグラフデータベースは、すべてのデータをノードと関係に保存します。 Neo4jデータベースデータを保存するために、追加のRRBMSデータベースもSQLデータベースも必要ありません。 グラフ形式でデータをネイティブ形式で保存します。
Neo4jはネイティブGPE(グラフ処理エンジン)を使用して、ネイティブグラフストレージ形式で動作します。
Graph DB Data Modelの主要な構成要素は次のとおりです-
- ノード
- 関係
- プロパティ
以下は、プロパティグラフの簡単な例です。
ここでは、円を使用してノードを表しました。 関係は矢印を使用して表されます。 関係は方向性です。 ノードのデータは、プロパティ(キーと値のペア)の観点から表現できます。 この例では、ノードのサークル内で各ノードのIdプロパティを表しています。
Neo4j-環境設定
この章では、exeファイルを使用してNeo4jをシステムにインストールする方法について説明します。
Windows exeファイルを使用したNeo4jデータベースサーバーのセットアップ
Neo4jをシステムにダウンロードするには、以下の手順に従ってください。
- ステップ1 *-https://neo4j.com/を使用してNeo4j公式サイトにアクセスします。 このリンクをクリックすると、neo4j Webサイトのホームページに移動します。
- ステップ2 *-上記のスクリーンショットで強調表示されているように、このページの右上には[ダウンロード]ボタンがあります。 クリックして。
- ステップ3 *-これにより、Neo4jのコミュニティエディションとエンタープライズエディションをダウンロードできるダウンロードページにリダイレクトされます。 それぞれのボタンをクリックして、ソフトウェアのコミュニティ版をダウンロードします。
- ステップ4 *-これにより、異なるオペレーティングシステムと互換性のあるNeo4jソフトウェアのコミュニティバージョンをダウンロードできるページに移動します。 目的のオペレーティングシステムに対応するファイルをダウンロードします。
これにより、次のスクリーンショットに示すように、 neo4j-community_windows-x64_3_1_1.exe という名前のファイルがシステムにダウンロードされます。
- ステップ5 *-exeファイルをダブルクリックしてNeo4jサーバーをインストールします。
- ステップ6 *-ライセンス契約に同意して、インストールを続行します。 プロセスの完了後、Neo4jがシステムにインストールされていることを確認できます。
サーバーの起動
- ステップ1 *-Windowsのスタートメニューをクリックし、Neo4jのスタートメニューショートカットをクリックしてNeo4jサーバーを起動します。
- ステップ2 *-ショートカットをクリックすると、Neo4j Communityエディションのウィンドウが表示されます。 デフォルトでは、c:\ Users \ [username] \ Documents \ Neo4j \ default.graphdbが選択されます。 必要に応じて、パスを別のディレクトリに変更できます。
- ステップ3 *-「開始」ボタンをクリックして、Neo4jサーバーを開始します。
サーバーが起動すると、次のスクリーンショットに示すように、データベースディレクトリが設定されていることを確認できます。
Neo4jでの作業
前の章で説明したように、neo4jはNeo4jで動作する組み込みのブラウズアプリケーションを提供します。 URL http://localhost:7474/ を使用してNeo4jにアクセスできます。
Neo4j-ビルディングブロック
Neo4jグラフデータベースには、次のビルディングブロックがあります-
- ノード
- プロパティ
- 関係
- ラベル
- データブラウザ
Node
ノードはグラフの基本単位です。 次の図に示すように、キーと値のペアを持つプロパティが含まれています。
ここでは、Node Name = "Employee"であり、キーと値のペアとして一連のプロパティが含まれています。
プロパティ
プロパティは、グラフノードと関係を記述するキーと値のペアです。
Key = Value
ここで、キーは文字列で、値はNeo4jデータ型を使用して表すことができます。
関係
関係は、グラフデータベースのもう1つの主要な構成要素です。 次の図に示すように、2つのノードを接続します。
ここで、EmpとDeptは2つの異なるノードです。 「WORKS_FOR」は、EmpノードとDeptノード間の関係です。
EmpからDeptへの矢印マークが示すように、この関係は次のように説明します-
Emp WORKS_FOR Dept
各関係には、1つの開始ノードと1つの終了ノードが含まれます。
ここで、「Emp」は開始ノード、「Dept」は終了ノードです。
この関係矢印マークは「Emp」ノードから「Dept」ノードへの関係を表すため、この関係は「Incoming Relationship」から「Dept」ノードおよび「Outgoing Relationship」から「Emp」ノードとして知られています。
ノードと同様に、関係にもキーと値のペアとしてプロパティを含めることができます。
ここで、「WORKS_FOR」関係には、キーと値のペアとして1つのプロパティがあります。
Id = 123
これは、この関係のIDを表します。
ラベル
ラベルは、共通名を一連のノードまたは関係に関連付けます。 ノードまたは関係には、1つ以上のラベルを含めることができます。 既存のノードまたは関係に新しいラベルを作成できます。 既存のノードまたは関係から既存のラベルを削除できます。
前の図から、2つのノードがあることがわかります。
左側のノードには「Emp」というラベルがあり、右側のノードには「Dept」というラベルがあります。
これら2つのノード間の関係には、ラベル「WORKS_FOR」もあります。
注意-Neo4jは、ノードまたは関係のプロパティにデータを保存します。
Neo4jデータブラウザー
Neo4jをインストールしたら、次のURLを使用してNeo4j Data Browserにアクセスできます。
http://localhost:7474/browser/
Neo4j Data Browserは、CQLコマンドを実行して出力を表示するために使用されます。
ここでは、ドルプロンプトですべてのCQLコマンドを実行する必要があります。 "$"
ドル記号の後にコマンドを入力し、「実行」ボタンをクリックしてコマンドを実行します。
Neo4j Database Serverと対話し、ドルプロンプトのすぐ下に結果を取得して表示します。
「VIビュー」ボタンを使用して、結果を図形式で表示します。 上の図は、「UIビュー」形式の結果を示しています。
[グリッドビュー]ボタンを使用して、結果をグリッドビューで表示します。 次の図は、同じ結果を「グリッドビュー」形式で示しています。
「グリッドビュー」を使用してクエリ結果を表示すると、2つの異なる形式でファイルにエクスポートできます。
CSV
[CSVのエクスポート]ボタンをクリックして、結果をcsvファイル形式でエクスポートします。
JSON
[JSONのエクスポート]ボタンをクリックして、結果をJSONファイル形式でエクスポートします。
ただし、「UIビュー」を使用してクエリ結果を表示する場合、JSONを1つの形式のみでファイルにエクスポートできます:JSON
Neo4j CQL-はじめに
CQLはCypher Query Languageの略です。 Oracle Databaseにクエリ言語SQLがあるように、Neo4jにはクエリ言語としてCQLがあります。
Neo4j CQL
- Neo4jグラフデータベースのクエリ言語です。
- 宣言的なパターンマッチング言語です。
- SQLのような構文に従います。
- 構文は非常にシンプルで、人間が読める形式です。
Oracle SQLのように
- Neo4j CQLには、データベース操作を実行するコマンドがあります。
- Neo4j CQLは、非常に複雑なクエリを簡単に作成するために、WHERE、ORDER BYなどの多くの句をサポートしています。 *Neo4j CQLは、String、Aggregationなどの機能をサポートしています。 それらに加えて、いくつかの関係関数もサポートしています。
Neo4j CQL句
Neo4j* C ypher Q uery L *anguageの読み取り句は次のとおりです-
Sr.No | Read Clauses | Usage |
---|---|---|
1 | MATCH | This clause is used to search the data with a specified pattern. |
2 | OPTIONAL MATCH | This is the same as match, the only difference being it can use nulls in case of missing parts of the pattern. |
3 | WHERE | This clause id is used to add contents to the CQL queries. |
4 | START | This clause is used to find the starting points through the legacy indexes. |
5 | LOAD CSV | This clause is used to import data from CSV files. |
Neo4j* C ypher Q uery L *anguageの書き込み句は次のとおりです-
Sr.No | Write Clause | Usage |
---|---|---|
1 | CREATE | This clause is used to create nodes, relationships, and properties. |
2 | MERGE | This clause verifies whether the specified pattern exists in the graph. If not, it creates the pattern. |
3 | SET | This clause is used to update labels on nodes, properties on nodes and relationships. |
4 | DELETE | This clause is used to delete nodes and relationships or paths etc. from the graph. |
5 | REMOVE | This clause is used to remove properties and elements from nodes and relationships. |
6 | FOREACH | This class is used to update the data within a list. |
7 | CREATE UNIQUE | Using the clauses CREATE and MATCH, you can get a unique pattern by matching the existing pattern and creating the missing one. |
8 | Importing CSV files with Cypher | Using Load CSV you can import data from .csv files. |
Neo4j* C ypher Q uery L *anguageの一般的な条項は次のとおりです-
Sr.No | General Clauses | Usage |
---|---|---|
1 | RETURN | This clause is used to define what to include in the query result set. |
2 | ORDER BY | This clause is used to arrange the output of a query in order. It is used along with the clauses* RETURN or WITH*. |
3 | LIMIT | This clause is used to limit the rows in the result to a specific value. |
4 | SKIP | This clause is used to define from which row to start including the rows in the output. |
5 | WITH | This clause is used to chain the query parts together. |
6 | UNWIND | This clause is used to expand a list into a sequence of rows. |
7 | UNION | This clause is used to combine the result of multiple queries. |
8 | CALL | This clause is used to invoke a procedure deployed in the database. |
Neo4j CQL関数
以下は、頻繁に使用されるNeo4j CQL関数です-
Sr.No | CQL Functions | Usage |
---|---|---|
1 | String | They are used to work with String literals. |
2 | Aggregation | They are used to perform some aggregation operations on CQL Query results. |
3 | Relationship | They are used to get details of relationships such as startnode, endnode, etc. |
すべてのNeo4j CQLコマンド、句と関数の構文、使用方法、および例については、以降の章で詳しく説明します。
Neo4j CQLデータ型
これらのデータ型はJava言語に似ています。 ノードまたは関係のプロパティを定義するために使用されます。
Neo4j CQLは、次のデータ型をサポートしています-
Sr.No | CQL Data Type | Usage |
---|---|---|
1 | Boolean | It is used to represent Boolean literals: true, false. |
2 | byte | It is used to represent 8-bit integers. |
3 | short | It is used to represent 16-bit integers. |
4 | int | It is used to represent 32-bit integers. |
5 | long | It is used to represent 64-bit integers. |
6 | float | It is used to represent 32-bit floating-point numbers. |
7 | double | It is used to represent 64-bit floating-point numbers. |
8 | char | It is used to represent 16-bit characters. |
9 | String | It is used to represent Strings. |
CQL演算子
以下は、Neo4j Cypher Query言語でサポートされている演算子のリストです。
Sr.No | Type | Operators |
---|---|---|
1 | Mathematical | +, -, *,/, %, ^ |
2 | Comparison | +, <>, <, >, ⇐, >= |
3 | Boolean | AND, OR, XOR, NOT |
4 | String | + |
5 | List | +, IN, [X], [X…..Y] |
6 | Regular Expression | =- |
7 | String matching | STARTS WITH, ENDS WITH, CONSTRAINTS |
Neo4j CQLのブール演算子
Neo4jは、複数の条件をサポートするためにNeo4j CQL WHERE句で使用する次のブール演算子をサポートしています。
Sr.No | Boolean Operators | Description |
---|---|---|
1 | AND | It is a Neo4j CQL keyword to support AND operation. It is like SQL AND operator. |
2 | OR | It is a Neo4j CQL keyword to support OR operation. It is like SQL AND operator. |
3 | NOT | It is a Neo4j CQL keyword to support NOT operation. It is like SQL AND operator. |
4 | XOR | It is a Neo4j CQL keyword to support XOR operation. It is like SQL AND operator. |
Neo4j CQLの比較演算子
Neo4jは、条件をサポートするためにNeo4j CQL WHERE句で使用する次の比較演算子をサポートしています。
Sr.No | Boolean Operators | Description |
---|---|---|
1 | = | It is a Neo4j CQL "Equal To" operator. |
2 | < > | It is a Neo4j CQL "Not Equal To" operator. |
3 | < | It is a Neo4j CQL "Less Than" operator. |
4 | > | It is a Neo4j CQL "Greater Than" operator. |
5 | ⇐ | It is a Neo4j CQL "Less Than Or Equal To" operator. |
6 | > = | It is a Neo4j CQL "Greater Than Or Equal To" operator. |
Neo4j CQL-関係の作成
Noe4jでは、関係は、グラフの2つのノードを接続する要素です。 これらの関係には、データの方向、タイプ、およびフォームパターンがあります。 この章では、次の方法を説明します-
- 関係を作成する
- 既存のノード間の関係を作成する
- ラベルとプロパティを使用して関係を作成する
関係を作成する
CREATE句を使用して関係を作成できます。 次の構文に示すように、ハイフン「-」と矢印「→」の間に配置される関係の方向に応じて、角カッコ「[]」内の関係を指定します。
構文
以下は、CREATE句を使用して関係を作成する構文です。
CREATE (node1)-[:RelationshipType]->(node2)
例
まず、データベースに2つのノードIndとDhawanを作成します(以下を参照)。
CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"})
CREATE (Ind:Country {name: "India"})
今、これらの2つのノードの間に BATSMAN_OF という名前の関係を作成します-
CREATE (Dhawan)-[r:BATSMAN_OF]->(Ind)
最後に、両方のノードを返して、作成された関係を確認します。
RETURN Dhawan, Ind
ドルプロンプトに目的のクエリをコピーして貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
既存のノード間の関係の作成
*MATCH* 句を使用して、既存のノード間に関係を作成することもできます。
構文
MATCH句を使用して関係を作成する構文は次のとおりです。
MATCH (a:LabeofNode1), (b:LabeofNode2)
WHERE a.name = "nameofnode1" AND b.name = " nameofnode2"
CREATE (a)-[: Relation]->(b)
RETURN a,b
例
次に、match句を使用して関係を作成するサンプルのCypherクエリを示します。
MATCH (a:player), (b:Country) WHERE a.name = "Shikar Dhawan" AND b.name = "India"
CREATE (a)-[r: BATSMAN_OF]->(b)
RETURN a,b
上記のクエリを実行するには、次の手順を実行します。
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
ラベルとプロパティとの関係の作成
CREATE句を使用して、ラベルおよびプロパティとの関係を作成できます。
構文
以下は、CREATE句を使用してラベルとプロパティとの関係を作成する構文です。
CREATE (node1)-[label:Rel_Type {key1:value1, key2:value2, . . . n}]-> (node2)
例
次に、ラベルとプロパティとの関係を作成するサンプルサイファークエリを示します。
MATCH (a:player), (b:Country) WHERE a.name = "Shikar Dhawan" AND b.name = "India"
CREATE (a)-[r:BATSMAN_OF {Matches:5, Avg:90.75}]->(b)
RETURN a,b
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
完全なパスを作成する
Neo4jでは、パスは連続的な関係を使用して形成されます。 create句を使用してパスを作成できます。
構文
以下は、CREATE句を使用してNeo4jでパスを作成する構文です。
CREATE p = (Node1 {properties})-[:Relationship_Type]->
(Node2 {properties})[:Relationship_Type]->(Node3 {properties})
RETURN p
例
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
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 プロパティとともにノードを作成しました。
関係をマージする
ノードと同様に、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は次のスクリーンショットに示すように関係を作成します。
同様に、複数の関係と無向の関係もマージできます。
Neo4j-セット句
Set句を使用すると、既存のノードまたは関係に新しいプロパティを追加したり、既存のプロパティ値を追加または更新したりできます。
この章では、次の方法について説明します-
- プロパティを設定する
- プロパティを削除する
- 複数のプロパティを設定する
- ノードにラベルを設定する
- ノードに複数のラベルを設定する
プロパティを設定する
SET句を使用して、ノードに新しいプロパティを作成できます。
構文
以下は、プロパティを設定するための構文です。
MATCH (node:label{properties . . . . . . . . . . . . . . })
SET node.property = value
RETURN node
例
例に進む前に、以下に示すように、まずDhawanという名前のノードを作成します。
CREATE (Dhawan:player{name: "shikar Dhawan", YOB: 1985, POB: "Delhi"})
以下は、“ highestscore” _という名前で値“ 187” _のプロパティを作成するサンプルサイファークエリです。
MATCH (Dhawan:player{name: "shikar Dhawan", YOB: 1985, POB: "Delhi"})
SET Dhawan.highestscore = 187
RETURN Dhawan
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のscrenshotに示すように、URL *http://localhost:7474/ を使用してNeo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。 ここでは、キーと値のペアがhighestscore/187のプロパティが「Dhawan」という名前のノードに作成されていることがわかります。
プロパティの削除
*NULL* を値として渡すことにより、既存のプロパティを削除できます。
構文
以下は、SET句を使用してノードからプロパティを削除する構文です。
MATCH (node:label {properties})
SET node.property = NULL
RETURN node
例
例に進む前に、次のようにノード「jadeja」を作成します。
Create (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})
以下は、以下に示すようにSET句を使用してこのノードからPOBという名前のプロパティを削除するサンプルサイファークエリです。
MATCH (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})
SET Jadeja.POB = NULL
RETURN Jadeja
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。 ここで、 POB という名前の変数が削除されたことを確認できます。
複数のプロパティを設定する
同様に、Set句を使用してノードに複数のプロパティを作成できます。 そのためには、これらのキーと値のペアをコンマで指定する必要があります。
構文
以下は、SET句を使用してノードに複数のプロパティを作成する構文です。
MATCH (node:label {properties})
SET node.property1 = value, node.property2 = value
RETURN node
例
次に、Neo4jのSET句を使用してノードに複数のプロパティを作成するサンプルサイファークエリを示します。
MATCH (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988})
SET Jadeja.POB: "NavagamGhed", Jadeja.HS = "90"
RETURN Jadeja
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。 ここで、POBおよびHSという名前のプロパティが作成されたことを確認できます。
ノードにラベルを設定する
SET句を使用して、既存のノードにラベルを設定できます。
構文
以下は、既存のノードにラベルを設定する構文です。
MATCH (n {properties . . . . . . . })
SET n :label
RETURN n
例
例に進む前に、以下に示すように、最初にノード「アンダーソン」を作成します。
CREATE (Anderson {name: "James Anderson", YOB: 1982, POB: "Burnely"})
次に、SET句を使用してノードにラベルを設定するサンプルサイファークエリを示します。 このクエリは、ラベル「player」をノードAndersonに追加して返します。
MATCH (Anderson {name: "James Anderson", YOB: 1982, POB: "Burnely"})
SET Anderson: player
RETURN Anderson
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。 ここで、「player」というラベルがノードに追加されていることがわかります。
ノードに複数のラベルを設定する
SET句を使用して、既存のノードに複数のラベルを設定できます。 ここでは、ラベルをコロン「:」で区切って指定する必要があります。
構文
以下は、SET句を使用して既存のノードに複数のラベルを設定する構文です。
MATCH (n {properties . . . . . . . })
SET n :label1:label2
RETURN n
例
例に進む前に、以下に示すように、まず「Ishant」という名前のノードを作成します。
CREATE (Ishant {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"})
以下は、SET句を使用してノードに複数のラベルを作成するために使用されるサンプルサイファークエリです。
MATCH (Ishant {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"})
SET Ishant: player:person
RETURN Ishant
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。 ここでは、 Ishant という名前のノードに2つのラベル(personとplayer)が追加されていることがわかります。
Neo4j-句の削除
DELETE句を使用して、データベースからノードと関係を削除できます。
すべてのノードと関係の削除
以下は、DELETE句を使用してデータベース内のすべてのノードと関係を削除するクエリです。
問い合わせ
MATCH (n) DETACH DELETE n
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
これにより、neo4jデータベースからすべてのノードと関係が削除され、空になります。
特定のノードの削除
特定のノードを削除するには、上記のクエリの「n」の場所にノードの詳細を指定する必要があります。
構文
以下は、DELETE句を使用してNeo4jから特定のノードを削除する構文です。
MATCH (node:label {properties . . . . . . . . . . })
DETACH DELETE node
例
例に進む前に、以下に示すように、Neo4jデータベースにノード「Ishant」を作成します。
CREATE (Ishant:player {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"})
以下は、DELETE句を使用して上記で作成したノードを削除するサンプルサイファークエリです。
MATCH (Ishant:player {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"})
DETACH DELETE Ishant
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。 ここで、指定したノードが削除されたことを確認できます。
Neo4j-Foreach句
*FOREACH* 句は、パスのコンポーネント、または集約の結果に関係なく、リスト内のデータを更新するために使用されます。
構文
FOREACH句の構文は次のとおりです。
MATCH p = (start node)-[*]->(end node)
WHERE start.node = "node_name" AND end.node = "node_name"
FOREACH (n IN nodes(p)| SET n.marked = TRUE)
例
例に進む前に、次のようにNeo4jデータベースにパス p を作成します。
CREATE p = (Dhawan {name:"Shikar Dhawan"})-[:TOPSCORRER_OF]->(Ind{name:
"India"})-[:WINNER_OF]->(CT2013{name: "Champions Trophy 2013"})
RETURN p
以下は、FOREACH句を使用してパスに沿ったすべてのノードにプロパティを追加するサンプルサイファークエリです。
MATCH p = (Dhawan)-[*]->(CT2013)
WHERE Dhawan.name = "Shikar Dhawan" AND CT2013.name = "Champions Trophy 2013"
FOREACH (n IN nodes(p)| SET n.marked = TRUE)
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
検証
ノードの作成を確認するには、ドルプロンプトで次のクエリを入力して実行します。
MATCH (n) RETURN n
このクエリは、データベース内のすべてのノードを返します(このクエリについては、以降の章で詳しく説明します)。
次のスクリーンショットに示すように、実行すると、このクエリは作成されたノードを表示します。
Neo4j-マッチ条項
この章では、Match句と、この句を使用して実行できるすべての機能について学習します。
一致を使用してすべてのノードを取得
Neo4jのMATCH句を使用すると、Neo4jデータベース内のすべてのノードを取得できます。
例
例に進む前に、以下に示すように3つのノードと2つの関係を作成します。
CREATE (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"})
CREATE (Ind:Country {name: "India", result: "Winners"})
CREATE (CT2013:Tornament {name: "ICC Champions Trophy 2013"})
CREATE (Ind)-[r1:WINNERS_OF {NRR:0.938 ,pts:6}]->(CT2013)
CREATE(Dhoni)-[r2:CAPTAIN_OF]->(Ind)
CREATE (Dhawan:player{name: "shikar Dhawan", YOB: 1995, POB: "Delhi"})
CREATE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})
CREATE (Dhawan)-[:TOP_SCORER_OF {Runs:363}]->(Ind)
CREATE (Jadeja)-[:HIGHEST_WICKET_TAKER_OF {Wickets:12}]->(Ind)
以下は、Neo4jデータベース内のすべてのノードを返すクエリです。
MATCH (n) RETURN n
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
特定のラベルの下のすべてのノードの取得
match句を使用すると、特定のラベルの下にあるすべてのノードを取得できます。
構文
以下は、特定のラベルの下にあるすべてのノードを取得する構文です。
MATCH (node:label)
RETURN node
例
次に、サンプルのCypherクエリを示します。これは、データベース内のすべてのノードを player というラベルで返します。
MATCH (n:player)
RETURN n
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
関係による一致
MATCH句を使用して、関係に基づいてノードを取得できます。
構文
以下は、MATCH句を使用した関係に基づいてノードを取得する構文です。
MATCH (node:label)<-[: Relationship]-(n)
RETURN n
例
次に、MATCH句を使用して関係に基づいてノードを取得するサンプルサイファークエリを示します。
MATCH (Ind:Country {name: "India", result: "Winners"})<-[: TOP_SCORER_OF]-(n)
RETURN n.name
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
すべてのノードを削除
MATCH句を使用して、すべてのノードを削除できます。
問い合わせ
以下は、Neo4jのすべてのノードを削除するクエリです。
MATCH (n) detach delete n
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
Neo4j-オプションの一致句
*OPTIONAL MATCH* 句は、その中に記述されているパターンを検索するために使用され、パターンの欠落部分にヌルを使用します。
OPTIONAL MATCHはmatch句に似ていますが、唯一の違いはパターンの欠落部分の結果としてnullを返すことです。
構文
以下は、リレーションシップを伴うオプションマッチの構文です。
MATCH (node:label {properties. . . . . . . . . . . . . .})
OPTIONAL MATCH (node)-->(x)
RETURN x
例
次に、ノードICCT2013から関係を取得しようとするサンプルサイファークエリを示します。 そのようなノードがないため、nullを返します。
MATCH (a:Tornament {name: "ICC Champions Trophy 2013"})
OPTIONAL MATCH (a)-->(x)
RETURN x
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。 ここでは、必要なパターンに一致するものがないため、Neo4jがnullを返したことを確認できます。
Neo4j-Where Clause
SQLと同様に、Neo4j CQLはCQL MATCHコマンドでWHERE句を提供して、MATCHクエリの結果をフィルタリングします。
構文
WHERE句の構文は次のとおりです。
MATCH (label)
WHERE label.country = "property"
RETURN label
例
例に進む前に、以下に示すようにデータベースに5つのノードを作成します。
CREATE(Dhawan:player{name:"shikar Dhawan", YOB: 1985, runs:363, country: "India"}
CREATE(Jonathan:player{name:"Jonathan Trott", YOB:1981, runs:229, country:"South Africa"}
CREATE(Sangakkara:player{name:"Kumar Sangakkara", YOB:1977, runs:222,
country:"Srilanka"})
CREATE(Rohit:player{name:"Rohit Sharma", YOB: 1987, runs:177, country:"India"})
CREATE(Virat:player{name:"Virat Kohli", YOB: 1988, runs:176, country:"India"})
CREATE(Ind:Country {name: "India", result: "Winners"})
以下は、WHERE句を使用して国インドに属するすべてのプレーヤー(ノード)を返すサンプルサイファークエリです。
MATCH (player)
WHERE player.country = "India"
RETURN player
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
複数の条件を持つWHERE句
WHERE句を使用して、複数の条件を確認することもできます。
構文
以下は、複数の条件でNeo4jでWHERE句を使用する構文です。
MATCH (emp:Employee)
WHERE emp.name = 'Abc' AND emp.name = 'Xyz'
RETURN emp
例
以下は、2つの条件を使用してNeo4jデータベース内のノードをフィルタリングするサンプルサイファークエリです。
MATCH (player)
WHERE player.country = "India" AND player.runs >=175
RETURN player
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
Where句との関係の使用
Where句を使用して、関係を使用してノードをフィルター処理することもできます。
例
データベースに次のグラフがあると仮定します。
以下に示すWHERE句を使用してインドのトップスコアラーを取得するサンプルサイファークエリを次に示します。
MATCH (n)
WHERE (n)-[: TOP_SCORER_OF]->( {name: "India", result: "Winners"})
RETURN n
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。 ここで、Neo4jがノードを返したことがわかります。これは、ノード名がIndiaである国との関係がTOP_SCORER_OFになっています。
Neo4j-カウント機能
次の詳細を含むグラフをデータベースに作成したとします。
カウント
- count()*関数は、行数をカウントするために使用されます。
構文
以下は、count関数の構文です。
MATCH (n { name: 'A' })-->(x)
RETURN n, count(*)
例
次に、* count()*関数の使用法を示すサンプルサイファークエリを示します。
Match(n{name: "India", result: "Winners"})--(x)
RETURN n, count(*)
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
グループ数
*COUNT* 句は、関係タイプのグループをカウントするためにも使用されます。
例
以下は、各リレーションに参加しているノードの数をカウントして返すサンプルサイファークエリです。
Match(n{name: "India", result: "Winners"})-[r]-(x)
RETURN type (r), count(*)
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
Neo4j-返品条項
RETURN句は、Neo4jでノード、関係、およびプロパティを返すために使用されます。 この章では、次の方法を学習します-
- 戻りノード
- 複数のノードを返す
- 関係を返す
- プロパティを返す
- すべての要素を返す
- 列エイリアスを持つ変数を返します
ノードを返す
RETURN句を使用してノードを返すことができます。
構文
以下は、RETURN句を使用してノードを返す構文です。
Create (node:label {properties})
RETURN node
例
例に進む前に、以下に示すように3つのノードと2つの関係を作成します。
Create (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"})
CREATE (Ind:Country {name: "India", result: "Winners"})
CREATE (CT2013:Tornament {name: "ICC Champions Trophy 2013"})
CREATE (Ind)-[r1:WINNERS_OF {NRR:0.938 ,pts:6}]->(CT2013)
CREATE(Dhoni)-[r2:CAPTAIN_OF]->(Ind)
以下は、Dhoniという名前のノードを作成して返すサンプルサイファークエリです。
Create (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"})
RETURN Dhoni
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
複数のノードを返す
return節を使用して複数のノードを返すこともできます。
構文
以下は、return節を使用して複数のノードを返す構文です。
CREATE (Ind:Country {name: "India", result: "Winners"})
CREATE (CT2013:Tornament {name: "ICC Champions Trophy 2013"})
RETURN Ind, CT2013
例
以下は、return節を使用して複数のノードを返すサンプルサイファークエリです。
CREATE (Ind:Country {name: "India", result: "Winners"})
CREATE (CT2013:Tornament {name: "ICC Champions Trophy 2013"})
RETURN Ind, CT2013
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。 ここで、Neo4jが2つのノードを返したことを確認できます。
関係を返す
Return句を使用して関係を返すこともできます。
構文
以下は、RETURN句を使用して関係を返す構文です。
CREATE (node1)-[Relationship:Relationship_type]->(node2)
RETURN Relationship
例
以下は、2つの関係を作成してそれらを返すサンプルサイファークエリです。
CREATE (Ind)-[r1:WINNERS_OF {NRR:0.938 ,pts:6}]->(CT2013)
CREATE(Dhoni)-[r2:CAPTAIN_OF]->(Ind)
RETURN r1, r2
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
プロパティを返す
RETURN句を使用してプロパティを返すこともできます。
構文
以下は、RETURN句を使用してプロパティを返す構文です。
Match (node:label {properties . . . . . . . . . . })
Return node.property
例
以下は、ノードのプロパティを返すサンプルサイファークエリです。
Match (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"})
Return Dhoni.name, Dhoni.POB
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
すべての要素を返す
RETURN句を使用して、Neo4jデータベースのすべての要素を返すことができます。
例
以下は、データベース内のすべての要素を返すCypher Queryの例です。
Match p = (n {name: "India", result: "Winners"})-[r]-(x)
RETURN *
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
列エイリアスを持つ変数を返す
Neo4jのRETURN句を使用して、エイリアスを持つ特定の列を返すことができます。
例
以下は、POB列を出生地として返すサンプルサイファークエリです。
Match (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"})
Return Dhoni.POB as Place Of Birth
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
Neo4j-句による順序
ORDER BY句を使用して、結果データを順番に並べることができます。
構文
ORDER BY句の構文は次のとおりです。
MATCH (n)
RETURN n.property1, n.property2 . . . . . . . .
ORDER BY n.property
例
例に進む前に、以下に示すようにNeo4jデータベースに5つのノードを作成します。
CREATE(Dhawan:player{name:"shikar Dhawan", YOB: 1985, runs:363, country: "India"})
CREATE(Jonathan:player{name:"Jonathan Trott", YOB:1981, runs:229, country:"South Africa"})
CREATE(Sangakkara:player{name:"Kumar Sangakkara", YOB:1977, runs:222, country:"Srilanka"})
CREATE(Rohit:player{name:"Rohit Sharma", YOB: 1987, runs:177, country:"India"})
CREATE(Virat:player{name:"Virat Kohli", YOB: 1988, runs:176, country:"India"})
次に、サンプルのCypherクエリを示します。このクエリは、ORDERBY句を使用してプレーヤーによってスコア付けされた実行順に上記で作成されたノードを返します。
MATCH (n)
RETURN n.name, n.runs
ORDER BY n.runs
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
複数のプロパティによるノードの順序付け
*ORDEYBY* 句を使用して、複数のプロパティに基づいてノードを配置できます。
構文
以下は、ORDERBY句を使用して複数のプロパティでノードを配置する構文です。
MATCH (n)
RETURN n
ORDER BY n.age, n.name
例
以下は、この章の前半で作成されたノードをプロパティ(実行と国)に基づいて配置するサンプルサイファークエリです。
MATCH (n)
RETURN n.name, n.runs, n.country
ORDER BY n.runs, n.country
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
降順によるノードの順序付け
*ORDERBY* 句を使用して、データベース内のノードを降順で配置できます。
構文
以下は、データベースにノードを配置するための構文です。
MATCH (n)
RETURN n
ORDER BY n.name DESC
例
以下は、ORDERBY句を使用してデータベース内のノードを降順に並べるサンプルサイファークエリです。
MATCH (n)
RETURN n.name, n.runs
ORDER BY n.runs DESC
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
Neo4j-制限条項
*limit* 句は、出力の行数を制限するために使用されます。
構文
LIMIT句の構文は次のとおりです。
MATCH (n)
RETURN n
ORDER BY n.name
LIMIT 3
例
例に進む前に、以下に示すように、Neo4jデータベースに5つのノードを作成します。
CREATE(Dhawan:player{name:"shikar Dhawan", YOB: 1985, runs:363, country: "India"})
CREATE(Jonathan:player{name:"Jonathan Trott", YOB:1981, runs:229, country:"South Africa"})
CREATE(Sangakkara:player{name:"Kumar Sangakkara", YOB:1977, runs:222, country:"Srilanka"})
CREATE(Rohit:player{name:"Rohit Sharma", YOB: 1987, runs:177, country:"India"})
CREATE(Virat:player{name:"Virat Kohli", YOB: 1988, runs:176, country:"India"})
以下は、上記で作成されたノードを降順で返し、結果のレコードを3に制限するサンプルサイファークエリです。
MATCH (n)
RETURN n.name, n.runs
ORDER BY n.runs DESC
LIMIT 3
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
式で制限する
式でLIMIT句を使用することもできます。
例
以下は、式を使用してレコードを制限するサンプルサイファークエリです。
MATCH (n)
RETURN n.name, n.runs
ORDER BY n.runs DESC
LIMIT toInt(3 * rand())+ 1
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
Neo4j-句をスキップ
SKIP句は、出力に行を含める開始行を定義するために使用されます。
例
例に進む前に、以下に示すように5つのノードを作成します。
CREATE(Dhawan:player{name:"shikar Dhawan", YOB: 1985, runs:363, country: "India"})
CREATE(Jonathan:player{name:"Jonathan Trott", YOB:1981, runs:229, country:"South Africa"})
CREATE(Sangakkara:player{name:"Kumar Sangakkara", YOB:1977, runs:222, country:"Srilanka"})
CREATE(Rohit:player{name:"Rohit Sharma", YOB: 1987, runs:177, country:"India"})
CREATE(Virat:player{name:"Virat Kohli", YOB: 1988, runs:176, country:"India"})
以下は、最初の3つのノードをスキップしてデータベース内のすべてのノードを返すサンプルサイファークエリです。
MATCH (n)
RETURN n.name, n.runs
ORDER BY n.runs DESC
SKIP 3
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
式の使用をスキップ
式を使用して結果のレコードをスキップできます。
例
次に、式でSKIP句を使用するサンプルサイファークエリを示します。
MATCH (n)
RETURN n.name, n.runs
ORDER BY n.runs DESC
SKIP toInt (2*rand())+ 1
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
Neo4j-句あり
WITH句を使用して、クエリアートを連結できます。
構文
WITH句の構文は次のとおりです。
MATCH (n)
WITH n
ORDER BY n.property
RETURN collect(n.property)
例
次に、WITH句の使用法を示すサンプルサイファークエリを示します。
MATCH (n)
WITH n
ORDER BY n.name DESC LIMIT 3
RETURN collect(n.name)
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
Neo4j-アンワインド句
unwind節は、リストを一連の行に巻き戻すために使用されます。
例
以下は、リストを巻き戻すサンプルサイファークエリです。
UNWIND [a, b, c, d] AS x
RETURN x
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
Neo4j-文字列関数
SQLと同様に、Neo4J CQLは、必要な結果を得るためにCQLクエリで使用する一連の文字列関数を提供しています。
ここでは、重要で頻繁に使用される機能のいくつかについて説明します。
文字列関数リスト
以下は、Neo4jの主要な文字列関数のリストです。
Sr.No | Function & Description |
---|---|
1 |
すべての文字を大文字に変更するために使用されます。 |
2 |
すべての文字を小文字に変更するために使用されます。 |
3 |
指定された文字列の部分文字列を取得するために使用されます。 |
4 |
Replace これは、サブストリングをストリングの特定のサブストリングで置き換えるために使用されます。 |
Neo4j-集約関数
SQLと同様に、Neo4j CQLはRETURN句で使用するいくつかの集計関数を提供しています。 SQLのGROUP BY句に似ています。
MATCHコマンドでこのRETURN +集約関数を使用して、ノードのグループで作業し、集約された値を返すことができます。
集約関数リスト
以下は、Neo4jの集約関数のリストです。
Sr.No | Function & Description |
---|---|
1 |
MATCHコマンドによって返された行数を返します。 |
2 |
MATCHコマンドによって返された行のセットから最大値を返します。 |
3 |
MATCHコマンドによって返された行のセットから最小値を返します。 |
4 |
MATCHコマンドによって返されたすべての行の合計値を返します。 |
5 |
MATCHコマンドによって返されるすべての行の平均値を返します。 |
Neo4j-バックアップと復元
リアルタイムアプリケーションでは、アプリケーションデータベースのバックアップを定期的に取得する必要があります。これにより、障害ポイントで何らかの動作状態に復元できます。
このルールは、RDBMSデータベースとNoSQLデータベースの両方に適用されます。
このセクションでは、2つの重要なDBAタスクについて説明します。
- Neo4jデータベースのバックアップ方法。
- Neo4jデータベースを特定のバックアップに復元する方法。
注-これらの手順は、Windowsオペレーティングシステムのみに適用されます。 他のオペレーティングシステムで同じ手順を実行するには、同様の種類のコマンドを使用する必要があります。
Neo4jデータベースのバックアップ
- ステップ1 *-次のパスを使用して「Neo4jコミュニティ」をクリックします-
Windowsの「スタート」ボタン→「すべてのプログラム」→「Neo4jコミュニティ」→「Neo4jコミュニティ」
デフォルトでは、* c:\ Users \ [username] \ Documents \ Neo4j \ default.graphdb。*を選択します。ただし、必要に応じて、パスを別のディレクトリに変更できます。
- ステップ2 *-ここでは、Neo4jデータベースフォルダーに変更しました。
C:\ Ne04j2.0db
- ステップ3 *-[開始]ボタンをクリックします。
サーバーが起動すると、Neo4jデータベースファイルが指定されたディレクトリに生成されることを確認できます。
データベースのバックアップをとる前に、まず行うべきことはNeo4jデータベースサーバーをシャットダウンすることです。
- ステップ4 *-[停止]ボタンをクリックしてサーバーをシャットダウンします。
Neo4jデータベースファイルはC:\ Ne04j2.0dbで入手できます。
- ステップ5 *-コマンドプロンプトを開きます。
- ステップ6 *-C:\ Neo4jに「Neo4jDbBackup-01」フォルダを作成します(これはファイルシステム内の任意の場所になります)。
mkdir C:\Neo4j\Neo4jDbBackup-01
指定されたファイルシステムの場所「C:\ Neo4j \」に新しいフォルダー「Neo4jDbBackup-01」を作成します。
- ステップ7 *-次のコマンドを入力し、Enterキーを押します。
copy C:\Ne04j2.0db C:\Neo4j\Neo4jDbBackup-01
これは、ファイルが必要な宛先フォルダーにコピーされることを意味します。 そのフォルダーにアクセスし、フォルダーにデータベースファイルがあることを確認します。
- ステップ8 *-WinZip、7 Zip、WinRARなどのWindows圧縮/解凍ツールを使用して、データベースフォルダーを圧縮します。
- ステップ9 *-Neo4jDbBackup-01.zipファイルが作成されました。 ファイルシステムにメモリの制約がある場合は、「C:\ Neo4j \」の「Neo4jDbBackup-01」フォルダーを削除します。
Neo4jデータベースの復元
- ステップ1 *-データベースサーバーをシャットダウンします。 前の手順を参照して、サーバーをシャットダウンしてください。
- ステップ2 *-現在のデータベースフォルダーを空にします。
- ステップ3 *-WinZip、7 Zip、WinRarなどのWindows圧縮/解凍ツールを使用して、バックアップフォルダーを解凍します。
- ステップ4 *-コマンドプロンプトを開き、次のコマンドを実行します。
Copy C:\Neo4j\Neo4jDbBackup-01 C:\Ne04j2.0db
これで、データベースフォルダーに作業バックアップファイルが含まれていることがわかります。
- ステップ5 *-[開始]ボタンをクリックしてサーバーを起動します。
- ステップ6 *-いくつかのMATCH + RETURNコマンドを実行して、データベースが適切に復元されたかどうかを確認します。
Neo4j-一意の制約を作成する
Neo4jデータベースでは、CQL CREATEコマンドは常に新しいノードまたはリレーションシップを作成します。つまり、同じ値を使用しても、新しい行が挿入されます。 一部のノードまたは関係のアプリケーション要件に従って、この重複を回避する必要があります。 このために、いくつかのデータベース制約を使用して、ノードまたは関係の1つ以上のプロパティにルールを作成する必要があります。
SQLと同様に、Neo4jデータベースはノードまたは関係のプロパティに対するUNIQUE制約もサポートしています。 UNIQUE制約は、レコードの重複を避け、データ整合性ルールを実施するために使用されます。
一意の制約を作成する
Neo4j CQLは、ノードまたは関係のプロパティに一意の制約を作成するための「CREATE CONSTRAINT」コマンドを提供します。
構文
Neo4jでUNIQUE制約を作成する構文は次のとおりです。
MATCH (root {name: "Dhawan"})
CREATE UNIQUE (root)-[:LOVES]-(someone)
RETURN someone
例
例に進む前に、以下に示すように4つのノードを作成します。
CREATE(Dhawan:player{id:001, name: "shikar Dhawan", YOB: 1995, POB: "Delhi"})
CREATE(Jonathan:player {id:002, name: "Jonathan Trott", YOB: 1981, POB: "CapeTown"})
CREATE(Sangakkara:player {id:003, name: "Kumar Sangakkara", YOB: 1977, POB: "Matale"})
CREATE(Rohit:player {id:004, name: "Rohit Sharma", YOB: 1987, POB: "Nagpur"})
CREATE(Virat:player {id:005, name: "Virat Kohli", YOB: 1988, POB: "Delhi"})
次に、Neo4jを使用してプロパティIDにUNIQUE制約を作成するサンプルサイファークエリを示します。
CREATE CONSTRAINT ON (n:player) ASSERT n.id IS UNIQUE
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。
検証
ここで、冗長ID値を持つ別のノードを追加してみてください。 ここでは、ID 002 のノードを作成しようとしています。
CREATE (Jadeja:player {id:002, name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})
このクエリを実行すると、次のスクリーンショットに示すようなエラーメッセージが表示されます。
Neo4j-ユニークなドロップ
前の章の例で、UNIQUE制約操作の作成について既に説明しました。 この章では、例を使用してUNIQUE制約操作の削除について説明します。
Neo4j CQLには、ノードまたは関係プロパティから既存の一意の制約を削除するための「DROP CONSTRAINT」コマンドが用意されています。
構文
Neo4jでUNIQUE制約を削除するための構文は次のとおりです。
DROP CONSTRAINT ON (node:label)
ASSERT node.id IS UNIQUE
例
以下は、プロパティ id のUNIQUE制約を削除するサンプルサイファークエリです。
DROP CONSTRAINT ON (n:player)
ASSERT n.id IS UNIQUE
上記のクエリを実行するには、次の手順を実行します-
ステップ1 *-Neo4jデスクトップアプリを開き、Neo4jサーバーを起動します。 次のスクリーンショットに示すように、URL *http://localhost:7474/ を使用して、Neo4jの組み込みブラウザーアプリを開きます。
- ステップ2 *-目的のクエリをコピーしてドルプロンプトに貼り付け、次のスクリーンショットで強調表示されている(クエリを実行する)再生ボタンを押します。
結果
実行すると、次の結果が得られます。