Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将neo4j节点的属性存储为数组?_Neo4j_Cypher - Fatal编程技术网

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

如何将neo4j节点的属性存储为数组?,neo4j,cypher,Neo4j,Cypher,我正在使用neo4j进行人力资源分析项目,遇到了一个复杂的问题(我对cypher也很陌生)。基本上,我有一个员工列表,其中包含一些功能,如位置、技能集、教育和位置、所需技能的职位。我查看位置(员工的位置和职位的位置)是否匹配,然后将分数设置为1(否则为0)。如果我只有一个空缺职位,那么查询工作正常。但是,位置越多,变量将被last position的最后一个值覆盖。我可以想象将节点属性放在一个数组中,但cypher似乎没有这样做(不推荐使用) 这是我使用的查询,如果您能帮助我解决这个问题,我将

我正在使用neo4j进行人力资源分析项目,遇到了一个复杂的问题(我对cypher也很陌生)。基本上,我有一个员工列表,其中包含一些功能,如位置、技能集、教育和位置、所需技能的职位。我查看位置(员工的位置和职位的位置)是否匹配,然后将分数设置为1(否则为0)。如果我只有一个空缺职位,那么查询工作正常。但是,位置越多,变量将被last position的最后一个值覆盖。我可以想象将节点属性放在一个数组中,但cypher似乎没有这样做(不推荐使用)

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

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

您在问题()中使用的链接是针对已弃用的旧式RESTAPI的。如果要发出HTTP请求以执行Cypher,可以使用新的

为了每个职位有一个单独的员工分数,您不应该将分数存储在
employee
节点中,而是存储在
FUTURE\u 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
)已经确保同一结果行中的非聚合值集是不同的。

太棒了!谢谢!成功了。我不得不使用r,e,p,d,n,因为我得到了未知的错误r。我将
r,e,p
添加到
WITH
中。此外,这也告诉了新的SO用户如何处理答案。我尝试投票,但我得到了这样一句话:“感谢您的反馈!记录了声誉低于15的用户的投票,但不会更改公开显示的帖子分数。”我今天开了我的帐户。当我获得15的声誉时,我会再次尝试。再次感谢你,但是,接受一个答案没有最低声誉。接受这个答案。ThanksHow是否将一名给定员工分配到基于max(r.score)的给定职位,并转移到另一个职位r.score最高的员工?等等谢谢(@cybersam请告知)