Cypher:使用OPTIONAL MATCH和collect返回默认项目时没有

问题描述 投票:0回答:1

我正在使用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。

neo4j cypher
1个回答
3
投票

这应该工作:

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.