我正在使用Neo4J来检索一个人和他们的技能。这是我的Cypher查询:
MATCH (p:Person {id: "1"})
OPTIONAL MATCH (p) -[exp:HAS_EXPERIENCE]->(s:Skill)
WITH collect(distinct {id: s.id, name: s.name}) as skills, p
RETURN p.id as id, skills
这是结果:
{
"id": "1",
"skills": [
{
"name": null,
"id": null,
}
]
}
如您所见,技能列表包含“默认”项。但是,在这种特殊情况下,这个人没有技能。
为什么结果包含数组项?如何调整查询以返回空数组?
使用Neo4J 3.1.1。
这应该工作:
MATCH (p:Person {id: "1"})
OPTIONAL MATCH (p)-[exp:HAS_EXPERIENCE]->(s:Skill)
RETURN p.id AS id,
CASE WHEN s IS NULL THEN [] ELSE COLLECT(distinct {id: s.id, name: s.name}) END as skills;
如果s
不匹配,NULL
只会是OPTIONAL MATCH
。