0

ノードと既存のノードとの関係を確認して作成することはできません。

ノードが Neo4j データベースに既に存在するかどうかを確認し、ノードとこのノードとの関係を作成する必要があります。

ありがとうございました

4

3 に答える 3

2

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/

于 2014-03-31T14:03:36.857 に答える
1

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
于 2014-03-09T21:39:24.140 に答える
0

CypherMERGEはそれです: http://docs.neo4j.org/chunked/stable/query-merge.html。また、http://www.catb.org/esr/faqs/smart-questions.htmlも参考になるかもしれません。

于 2014-03-08T13:25:47.363 に答える