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

时间:2018-01-04 16:26:26

标签: neo4j cypher

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

2 个答案:

答案 0 :(得分:3)

这应该有效:

display: inline-block
如果.ui-tabs .ui-tabs-panel { display: inline-block; border-width: 0; padding: 1em 1.4em; background: 0 0 } 与任何内容都不匹配,

... this.state.countries.sort(/* Provide sort function here */).map((country,id) => { ... 只会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;

答案 1 :(得分:0)

您可能希望考虑以下事项:

MATCH (p:Person {id: "1"})
OPTIONAL MATCH (p) -[exp:HAS_EXPERIENCE]->(s:Skill)

RETURN p {id: p.id, skills: COLLECT(distinct s {.*})}

假设您希望从 技能 中获取所有字段。否则

... collect(distinct s {id:s.id, name:s.name})