(使用Neo4j 3.x和neo4j.v1 Python驱动程序)
我有两条轨道T1和T2到同一目标。在到达目标之前的某个地方,两个轨道在节点X处相遇并且变为一个直到达到目标。
Track T1: T----------X-----------A
Track T2: '-----Q
我使用以下Cypher查询生成每个轨道:
UNWIND {coords} AS coordinates
UNWIND {pax} AS pax
CREATE (n:Node)
SET n = coordinates
SET n.pax = pax
RETURN n
使用参数列表,例如{' pax':' A',' coords':[{' id':0,' lon': ' 8.553095',' lat':' 47.373146'},等等]}
然后使用id链接节点只是为了保持跟踪点的顺序:
UNWIND {pax} AS pax
MATCH (n:Node {pax: pax})
WITH n
ORDER BY n.id
WITH COLLECT(n) AS nodes
UNWIND RANGE(0, SIZE(nodes) - 2) AS idx
WITH nodes[idx] AS n1, nodes[idx+1] AS n2
MERGE (n1)-[:NEXT]->(n2)
从(未知)点X(上图中的CS1)开启,两个轨道都具有相同的轨迹点。我可以匹配那些使用:
MATCH (n:Node), (m:Node)
WHERE m <> n AND n.id < m.id AND n.lat = m.lat AND n.lon = m.lon
MERGE (n)-[:IS]->(m)
使用lat,lon是(相同的)坐标。这只是我确定第一个关节跟踪点的笨拙方式。我真正需要的是从点X开始有一个(链接)轨道,并且更新了pax属性,例如:作为[&#39; A&#39;,&#39; B&#39;]
问题1 (概括): 如何将具有关系的两个节点合并到具有更新属性的一个节点中? C3和S3合并为新节点CS3。
问题2 :
如果我有两个带有一组成对相同属性的链表,我该怎么做?
(Ax)-[:NEXT]-> (A1)-[:NEXT]->(A2)-[:NEXT]->(A3)
(Ax)-[:NEXT]-> (B1)-[:NEXT]->(B2)-[:NEXT]->(B3)
where Ax.x <> Bx.x but A1.x = B1.X and A2.x = B2.x etc.
感谢大家的提示和有用的想法。