如何解决密码问题,只有连接所有节点才返回结果
下图显示,三分之二的人同时拥有 java 和 PHP 作为技能。 我用这个查询生成了这个图
{
"rows": [
{
"name": "PHP","id": 23776,"entity_id": 23776,"yearsOfExperience": 2
},{
"name": "Java","id": 17477,"entity_id": 17477,"yearsOfExperience": 2
}
]
}
MATCH (s:SkillNode)
WHERE s.entity_id = row.entity_id
with s,row
match (c:CandidateNode)-[r:KNowS]->(s)
where r.years_of_experience<=row.yearsOfExperience
RETURN *;
我应该在查询中更改什么才能接收候选人(果岭),前提是他们拥有行中提供的所有技能?
对于我发布的示例,我不想让候选人“Ena Dyo Tria”而是所有其他人。 如果行不包含 PHP,则“Ena Dyo Tria”用户可能位于图表中。
解决方法
给你:
- 您需要收集所有行和所有技能
- 按行展开行并检查候选人的技能是否包含您想要的所有技能
- 检查与此候选人相关的每项技能是否都在您想要的所有技能列表中(Java 和 PHP)
MATCH (s:SkillNode)
WHERE s.entity_id = row.entity_id
WITH collect(row) as rows,collect(s) as allSkills
UNWIND rows as row
MATCH (c:CandidateNode)-[r:KNOWS]->(s:SkillNode)
WHERE r.years_of_experience <= row.yearsOfExperience AND s in allSkills
WITH c,collect(distinct r) as rels,collect(distinct s) as skills,allSkills
WHERE ALL(sk in allSkills where sk in skills)
RETURN c,rels,skills
Sample result:
╒════════════════╤═════════════╤════════════════════════════════════════╕
│"c" │"rels" │"skills" │
╞════════════════╪═════════════╪════════════════════════════════════════╡
│{"name":"Leo"} │[{},{},{}]│[{"name":"Java"},{"name":"PHP" }]│
├────────────────┼─────────────┼────────────────────────────────────────┤
│{"name":"Manos"}│[{},{"name":"PHP" }]│
└────────────────┴─────────────┴────────────────────────────────────────┘
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。