这与这个问题有关:如何将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
子句删除了e
和p
之间的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;