合并Neo4j中的曲目

时间:2016-05-28 22:33:50

标签: neo4j cypher

(使用Neo4j 3.x和neo4j.v1 Python驱动程序)

我有两条轨道T1和T2到同一目标。在到达目标之前的某个地方,两个轨道在节点X处相遇并且变为一个直到达到目标。 Track T1: T----------X-----------A Track T2: '-----Q

Model I would like to have: two tracks join at the first common trackpoint

我使用以下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。 The clumsy model I currently have: two tracks have their joint trackpoints joined by means of a relationship

问题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.

感谢大家的提示和有用的想法。

0 个答案:

没有答案