将集合的结尾连接到开头
Connecting the end of a set to the beginning
我们有一组连接的节点。每个节点都有一个 link 到链中的下一个节点。当链条用完时,那个末端节点就挂在那里。请参见下图。
Node path
这些节点中的每一个都具有相同的级别,因此只要它们在链中,它们的编号就相同。所以我希望做的是提出一个密码查询,在共享相同行号的最大 ID 和 MIN ID 之间构建一个 link。所以基本上把结尾和开头联系起来。有没有聪明的方法来做到这一点?
您的问题不够清晰,但是按照以下思路思考怎么样?
// find all levels in your dataset of nodes in the chains
MATCH (n)
WHERE (n)-[:NEXT]-()
WITH COLLECT(DISTINCT n.level) AS levels
UNWIND levels AS level
// for each level, find the chain
MATCH (start {level:level})-[:NEXT*]->(end {level:level})
WHERE NOT (
({level:level})-[:NEXT]->(start)
OR
(end)-[:NEXT]->({level:level})
)
// connect end to start
MERGE (end)-[:MYRELTYPE]->(start)
我们有一组连接的节点。每个节点都有一个 link 到链中的下一个节点。当链条用完时,那个末端节点就挂在那里。请参见下图。
Node path
这些节点中的每一个都具有相同的级别,因此只要它们在链中,它们的编号就相同。所以我希望做的是提出一个密码查询,在共享相同行号的最大 ID 和 MIN ID 之间构建一个 link。所以基本上把结尾和开头联系起来。有没有聪明的方法来做到这一点?
您的问题不够清晰,但是按照以下思路思考怎么样?
// find all levels in your dataset of nodes in the chains
MATCH (n)
WHERE (n)-[:NEXT]-()
WITH COLLECT(DISTINCT n.level) AS levels
UNWIND levels AS level
// for each level, find the chain
MATCH (start {level:level})-[:NEXT*]->(end {level:level})
WHERE NOT (
({level:level})-[:NEXT]->(start)
OR
(end)-[:NEXT]->({level:level})
)
// connect end to start
MERGE (end)-[:MYRELTYPE]->(start)