ノードと既存のノードとの関係を確認して作成することはできません。
ノードが Neo4j データベースに既に存在するかどうかを確認し、ノードとこのノードとの関係を作成する必要があります。
ありがとうございました
ノードと既存のノードとの関係を確認して作成することはできません。
ノードが Neo4j データベースに既に存在するかどうかを確認し、ノードとこのノードとの関係を作成する必要があります。
ありがとうございました
Neo4j のネイティブ言語である Cypher 2.0 を使用してその場で作成したデータと既存のデータをマージする方法は次のとおりです。
MERGE ({ name: "Jane" })-[r:KNOWS]->({ name: "John" })
実際、これらのデータは事前に存在する必要はありません。それはすべて、その場で、関係などすべてが作成されます。ただし、チェックはあまり行われておらず、小さなミスをすると、この方法で簡単に重複したエントリが作成されます。したがって、事前に確認することをお勧めします。
Cypher を使用して、ノードが既に存在するかどうかを確認する方法は次のとおりです。
MATCH (n:SomeNode {some_field: "some_discrete_data"}) RETURN n;
あなたの場合、おそらく次のようになります。
MATCH (n {id: 1}) RETURN n;
必要なデータを含むフィールドを持つノードがある場合 (この場合は であると仮定しましたが{id: 1}
、もちろん他のものが必要になる場合もあります)、それが返されます。そうでない場合は、0 ノードを返します。
警告: 必要なデータを記述しない場合、つまり{id: 1}
、データベース内のすべてのノードが返されますが、これは望ましくない場合があります。
ただし、1 つのノードだけとの関係を作成することはできません。それらの間の関係を作成するには、少なくとも2 つのノードが必要です。そこで、別のものを作成します:
CREATE (:OtherNode {id: 2});
この新しいノードと既存のノードとの関係を作成するには、 でそれらを検索しMATCH
、関係を作成する必要があります。次に例を示します。
MATCH (node1 {id: 1}), (node2 {id: 2})
CREATE (node1)<-[:LIKES]-(node2);
は<-
、node2 が既存の node1 との方向関係を持つことを示します。
ただし、このプロセスは 1 ステップで実行できます。つまり、ノードが既に存在するかどうかを確認し、新しいノードと、新しいノードと既存のノード間の関係をすべて同時に追加します。UNIQUE
次のキーワードを使用してこれを行うことができます。
MATCH (node1 {id: 1})
CREATE UNIQUE (node1)<-[:LIKES]-(node2 {id: 2});
node1 がすでに存在している限り、node2 とその node1 との関係が存在しない場合は作成されます。ただし、node1 が存在しない場合は何も起こりません。重複を避けたい場合、これは優れた安全機能です。
Python 固有の API については、使用するプログラミング言語に関連する言語ドライバーのドキュメントを確認する必要があります。ほとんどのドライバーは、何らかの形で Cypher を受け入れます。Python に関する関連部分は次のとおりです: http://book.py2neo.org/en/latest/cypher/
Cypher のサポートについては py2neo のドキュメントを参照し、次のようなマージ クエリを使用してください。
MERGE (user:User {name:"John"}) // get-or-crate
MERGE (friend:User {name:"Jane"}) // create friend
MERGE (user)-[r:KNOWS]->(friend) // create relationship
RETURN user,r,friend
CypherMERGE
はそれです: http://docs.neo4j.org/chunked/stable/query-merge.html。また、http://www.catb.org/esr/faqs/smart-questions.htmlも参考になるかもしれません。