2つのラベルPとMがあるとします。Mには名前M1、M2、M3..M10のノードがあります。 Pの50個のノードをMの各ノードに関連付ける必要があります。また、ラベルPのノードはMのノードと2つの関連を持つ必要がありません。サイファーを使用してノードが存在しない場合のノードの作成
これは私が思い付くかもしれないサイファークエリですが、作業。
このようにして、Mの10個のノードすべてに対して実行します。クエリを修正する際の助けに感謝します。
2つのラベルPとMがあるとします。Mには名前M1、M2、M3..M10のノードがあります。 Pの50個のノードをMの各ノードに関連付ける必要があります。また、ラベルPのノードはMのノードと2つの関連を持つ必要がありません。サイファーを使用してノードが存在しない場合のノードの作成
これは私が思い付くかもしれないサイファークエリですが、作業。
このようにして、Mの10個のノードすべてに対して実行します。クエリを修正する際の助けに感謝します。
これは私のために働いた。
MATCH (u:P), (r:M{Name:'M1'}),(s:M)
where not (s)-[:OWNS]->(u)
with u,r limit 50
CREATE (r)-[:OWNS]->(u);
uとrの制限に言及してくれてありがとうThomas。
バッチ処理にはapoc.periodic。*ライブラリを利用できます。常に一つだけ(r)-[:OWNS]->(u)
関係があるだろう場合、私は
call apoc.periodic.commit("
MATCH (u:P), (r:M{Name:'M1'}),(s:M) where not (s)-[:OWNS]->(u) and not (r)-[:OWNS]->(u)
with u,r limit {limit}
CREATE (r)-[:OWNS]->(u)
RETURN count(*)
",{limit:10000})
を含めるように私の最初のマッチを変更しますdocumentation
call apoc.periodic.commit("
MATCH (u:P), (r:M{Name:'M1'}),(s:M) where not (s)-[:OWNS]->(u)
with u,r limit {limit}
CREATE (r)-[:OWNS]->(u)
RETURN count(*)
",{limit:10000})
での詳細情報は、だから、手続きがループ
に分類されます方法はありませんこのクエリは、すばやくわかりやすくする必要があります。それはCartesian productsを避けるため、それは速いです:
MATCH (u:P)
WHERE not (:M)-[:OWNS]->(u)
WITH u LIMIT 50
MATCH (r:M {Name:'M1'})
CREATE (r)-[:OWNS]->(u);
それは最初の50個の所有されていないP
ノードに一致します。次に、「所有者」であると考えられるノードM
が見つけられ、ノードとノードの間にOWNS
の関係が作成されます。このクエリはもっと速くするには
所有M
ノードが(すべてのM
のノードをスキャンせずに)すぐに見つけることができるように、あなたは最初:M(Name)
にインデックスを作成することができます。
CREATE INDEX ON :M(Name);
私は接続する1つの方法を考えますすべての10個のノード:1つのクエリ内のM
MATCH (m:M)
WITH collect(m) as nodes
UNWIND nodes as node
MATCH (p:P) where not()-[:OWNS]->(p)
WITH node,p limit 50
CREATE (node)-[:OWNS]->(p)
我々だけにそれを簡素化することができ、収集してくつろぐために必要がある場合、私は本当にわからないが:
MATCH (m:M)
MATCH (p:P) where not()-[:OWNS]->(p)
WITH m,p limit 50
CREATE (node)-[:OWNS]->(p)
既存のものがありますか:Pと:Mノードの間のOWNS関係、またはこの種の関係を最初に作成するのはこのクエリですか? – InverseFalcon
これは最初の関係です。 –