迈出Neo4J的第一步 - 我不会得到的东西(可能与语法相关)
为什么会返回结果
MATCH (d:People)-[HAS_VEHICLE*]->(v:Vehicle) return d, v
虽然这不会返回任何结果
MATCH (d:People)-[r:HAS_VEHICLE*]->(v:Vehicle) return d, v
它们之间的区别在于引入了关系变量 - 但为什么它会影响查询是返回结果还是根本没有结果?
答案 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;