内の他のノードに同一の関係を有するノード間のリンクされたリストの関係を作成この図のようにのNeo4j
それと関係[:R]
を共有するすべての(:B)
ノード間のリンクされたリストの関係を作成することが可能です同じ(:A)
ノード、データベース内のすべての(:A)
ノード。順序が重要である場合は、すべて(:B)
ノードにプロパティorder
があるとします。
内の他のノードに同一の関係を有するノード間のリンクされたリストの関係を作成この図のようにのNeo4j
それと関係[:R]
を共有するすべての(:B)
ノード間のリンクされたリストの関係を作成することが可能です同じ(:A)
ノード、データベース内のすべての(:A)
ノード。順序が重要である場合は、すべて(:B)
ノードにプロパティorder
があるとします。
私は、あなたが各:B
ノードにorder
のプロパティを持っていると仮定しています。
CREATE (a1:A)-[:R]->(:B {order : 1}), (a1)-[:R]->(:B {order : 2}), (a1)-[:R]->(:B {order : 3})
CREATE (a2:A)-[:R]->(:B {order : 1}), (a2)-[:R]->(:B {order : 2}), (a2)-[:R]->(:B {order : 3})
はその後あなたがこのサイファークエリを使用することができます:私は、このサンプルデータを使用してい
// match pairs of :B when b2.order is equal to b1.order plus one
MATCH (a:A)-[:R]->(b1:B), (a)-[:R]->(b2:B)
WHERE b2.order = b1.order + 1
// Create the relation between :B nodes
CREATE (b1)-[:NETX]->(b2)
は、出力は次のようになります。
ありがとうございました! – Bria
@Briaよろしくお願いします! –
MATCH (A:A)-[:R]->(B:B)
WITH A,
B
ORDER BY B.order ASC // Comment out this line if the order is not important
WITH A,
collect(B) as bnodes // List of all nodes of the desired type
UNWIND RANGE(0, size(bnodes)-2) as i // Go through all the nodes except the last one
WITH bnodes[i] as B,
bnodes[i+1] as BN
CREATE (B)-[:NEXT]->(BN)
1つの追加オプションを:APOC Proceduresを使用してください。プロシージャーapoc.nodes.link()
は、ノードの集合を取り込み、指定された関係タイプを使用してリンクされたリストにします。使用例:
MATCH (A:A)-[:R]->(B:B)
WITH A, B
ORDER BY B.order ASC
WITH A, collect(B) as bNodes
CALL apoc.nodes.link(bNodes, 'NEXT')
このシナリオでは@ stdob-approachには利点がありますか? – Bria
私は 'apoc'の方がよりパフォーマンスが良いはずだと思っています。より大きなテストデータセットで両方をテストしたいかもしれません。また、PROFILEを実行して、行数とdbヒット数がどのように変化するかを監視しますが、プロシージャ・コールではdbヒットをレポートしないことに注意してください。 – InverseFalcon
問題の解決方法を示します。何がうまくいかなかったのですか? –