引入关系变量的Neo4J会影响多跳关系的结果

时间:2016-09-28 16:54:41

标签: neo4j cypher

迈出Neo4J的第一步 - 我不会得到的东西(可能与语法相关)

为什么会返回结果

MATCH (d:People)-[HAS_VEHICLE*]->(v:Vehicle) return d, v

虽然这不会返回任何结果

MATCH (d:People)-[r:HAS_VEHICLE*]->(v:Vehicle) return d, v

它们之间的区别在于引入了关系变量 - 但为什么它会影响查询是返回结果还是根本没有结果?

1 个答案:

答案 0 :(得分:4)

实际上,2个查询之间的区别在于第一个查询未指定关系类型。相反,第一个查询将HAS_VEHICLE指定为标识符

关系类型必须以冒号开头。所以,你的第一个查询应该是:

MATCH (d:People)-[:HAS_VEHICLE*]->(v:Vehicle) return d, v

[EDITED]

上述查询也应该不返回任何结果,这意味着您的数据库中没有与指定模式匹配的路径。例如,要匹配上述模式,所有关系必须是HAS_VEHICLE类型。

您可以将查询修改为不需要HAS_VEHICLE类型,并沿着与生成的新模式匹配的路径返回实际关系类型:

MATCH (d:People)-[rels*]->(v:Vehicle)
RETURN d, EXTRACT(r IN rels | TYPE(r)) AS types, v;