是否可以通过关系密码的属性进行迭代



这与这个问题有关:如何将neo4j节点的属性存储为数组? 我想遍历关系的属性并检查该值的最大值,并分配节点 1 和节点 2 的新关系,并从池中删除节点 1 并移动到第二个。换句话说,就像我之前的问题一样,如何将给定的员工分配到基于max(r.score(的给定职位,并转移到另一个职位具有最大r.score的员工?谢谢

使用此基本查询为具有最大 r.score w.r.t 职位的员工分配职位,并将其从候选人库中移除。但是,我必须手动运行第二个位置。理想情况下,我想要一些东西来检查可用位置的长度,然后用max(r.score(填充位置,然后在所有位置都被填充时停止。可能会返回雇用员工的报告...

MATCH (e:Employee)-[r:FUTURE_POSITION]->(p:Position) 
WITH MAX(r.score) as s  
MATCH (e)-[r]->(p) WHERE r.score = s 
CREATE (e)-[r2:YOUAREHIRED]->(p)
DELETE r
RETURN e.name, s

此查询可能适用于您:

MATCH (:Employee)-[r:FUTURE_POSITION]->(p:Position)
WITH p, COLLECT(r) AS rs
WITH p, REDUCE(t = rs[0], x IN rs[1..] |
CASE WHEN x.score > t.score THEN x ELSE t END) AS maxR
WITH p, maxR, maxR.score AS maxScore, STARTNODE(maxR) AS e
CREATE (e)-[:YOUAREHIRED]->(p)
DELETE maxR
RETURN p, e.name AS name, maxScore;
  • 第一个WITH子句收集每个p的所有FUTURE_POSITION关系。
  • 第二个WITH子句,对于每个p,得到与最大score的关系。
  • 第三个WITH子句提取后续子句所需的变量。
  • CREATE子句在e(给定p得分最高的员工(和p之间创建了YOUAREHIRED关系。
  • DELETE子句删除了ep之间的FUTURE_POSITION关系。
  • RETURN子句返回每个p,以及刚刚被雇用p的员工的name,以及他的分数,maxScore

[更新]

如果要删除获取YOUAREHIRED关系的每个p节点的所有FUTURE_POSITION关系,可以使用以下略有不同的查询:

MATCH (:Employee)-[r:FUTURE_POSITION]->(p:Position)
WITH p, COLLECT(r) AS rs
WITH p, rs, REDUCE(t = rs[0], x IN rs[1..] |
CASE WHEN x.score > t.score THEN x ELSE t END) AS maxR
WITH p, rs, maxR.score AS maxScore, STARTNODE(maxR) AS e
CREATE (e)-[:YOUAREHIRED]->(p)
FOREACH(x IN rs | DELETE x)
RETURN p, e.name AS name, maxScore;

最新更新