Neo4j:为什么不返回长度为 0 的路径?

Neo4j: Why are paths of length 0 not returned?

想象一个简单的场景,其中一家公司有产品,并且此数据:

(c:Company {name: 'Uber'})-[:has_product]->(p:Product {name: 'Uber App'})

我希望这个查询

match (c:Company)-[:has_product*0..1]->(p:Product)
return c.name, p.name;

到return

Uber, null
Uber, Uber App

因为路径的长度可以为 0。但是,它 return 仅

Uber, Uber App

我是否误解了路径在 Neo4j 中的工作方式?

我认为您混淆了零长度匹配的工作原理。零长度关系跃点将匹配起始节点本身。在您的查询中,虽然路径中的结束节点指定了 :Product 标签。由于第一个节点具有 :Company 标签,您的查询将永远不会产生零长度匹配。如果您在没有在末端节点上指定标签的情况下尝试以下查询,您应该 return 几行:其中 'Uber' 在两列中,另一行在其中'Uber' 在一列中,另一列有产品 'Uber App'.

MATCH (c:Company {name: 'Uber'})-[*0..1]->(p)
RETURN c.name, p.name;