如何将neo4j节点的属性存储为数组?

时间:2018-06-13 17:57:21

标签: neo4j cypher

我正在使用neo4j开展人力资源分析项目,我遇到了一个复杂的查询(我对cypher也很新)。基本上,我有一份员工名单,其中包括位置,技能,教育和位置,所需技能等一些功能。我查看位置(员工的位置和位置的位置)是否匹配并将该分数设置为1(否则为0)。如果我只有一个未结头寸,则查询工作正常。但是,如果位置越多,变量将被最后一个位置的最后一个值覆盖。我想将节点属性放在一个数组中,但似乎cypher没有(不推荐)。

https://neo4j.com/docs/rest-docs/current/#rest-api-property-values

这是我使用的查询,如果您能帮助我解决问题,我将不胜感激。最终目标是为每个给定职位的员工分数,并填写最高分的员工。这在密码上是否可能? 非常感谢

MATCH
  (e:Employee)-[r:FUTURE_POSITION]-> (p:Position {open_status:1}),
  (e)-[h:HAS_DEGREE]-> (d:Degree),
  (e)-[s:HAS_SKILL]-> (n:Personal_Skill)   
WITH r, e,p,d,n,
  CASE WHEN p.position_state = e.home_state THEN 1 ELSE 0 END AS SameStateScore,
  CASE WHEN p.position_city = e.home_city THEN 1 ELSE 0 END AS SameCityScore,
  CASE WHEN d.name = "College Degree" THEN 1 ELSE 0 END AS HasCollegeDegree,
  CASE WHEN n.name = "Management" THEN 1 ELSE 0 END AS HasRequiredSkill
SET e.score = SameStateScore + SameCityScore + HasCollegeDegree + HasRequiredSkill
RETURN DISTINCT e.name,p.name, SameStateScore,SameCityScore,HasCollegeDegree,MAX(HasRequiredSkill) AS HasRequiredSkill, e.score
ORDER BY e.score DESC

1 个答案:

答案 0 :(得分:0)

您在问题中使用的链接(https://neo4j.com/docs/rest-docs/current/#rest-api-property-values)适用于已弃用的旧版REST API 。如果要发出执行Cypher的HTTP请求,可以使用新的HTTP API代替。

为了在每个职位上获得单独的员工分数,您不应该将分数存储在Employee节点中,而是存储在FUTURE_POSITION关系中 - 因为每个职位之间存在单独的关系。因此,只需使用r.score代替e.score

MATCH
  (e:Employee)-[r:FUTURE_POSITION]->(p:Position {open_status:1}),
  (e)-[:HAS_DEGREE]-> (d:Degree),
  (e)-[:HAS_SKILL]-> (n:Personal_Skill)
WITH r, e, p,
  CASE WHEN p.position_state = e.home_state THEN 1 ELSE 0 END AS SameStateScore,
  CASE WHEN p.position_city = e.home_city THEN 1 ELSE 0 END AS SameCityScore,
  CASE WHEN d.name = "College Degree" THEN 1 ELSE 0 END AS HasCollegeDegree,
  CASE WHEN n.name = "Management" THEN 1 ELSE 0 END AS HasRequiredSkill
SET r.score = SameStateScore + SameCityScore + HasCollegeDegree + HasRequiredSkill
RETURN DISTINCT
  e.name, p.name, SameStateScore, SameCityScore, HasCollegeDegree,
  MAX(HasRequiredSkill) AS HasRequiredSkill, r.score
ORDER BY r.score DESC

此外,可能不需要DISTINCT选项,因为聚合函数(如MAX)已经确保同一结果行中的非聚合值集合是不同的。