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;
想象一个简单的场景,其中一家公司有产品,并且此数据:
(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;