Cypher - 如何获取重复的 (a)-[:REL1]->(b)-[:REL2]->(c) 链中的所有节点
Cypher - How to get all nodes in a repeated (a)-[:REL1]->(b)-[:REL2]->(c) chain
我是 neo4j 和 cypher 的新手,正在研究如何 model/query 我的数据。
我有一套商品可以给工厂in/produced使用。
我将其建模为:
(:Factory)-[:PRODUCES]->(:Good)
(:Good)-[:USED_IN]->(:Factory)
我想找到创建特定目标商品所需的所有工厂和商品。
我可以用我目前对数据建模的方式来做到这一点吗?
如果您对以不同方式接近模型有任何建议,请告诉我!
我写了一个示例查询和结果来展示这种情况。
查询只能匹配 2 级深度的要求,我正在寻找可以匹配任意级别深度的东西,而不是像这样硬编码:)
MATCH (targetGood:Good) WHERE targetGood.name = "Fuel"
MATCH (targetGood)<-[:PRODUCES]-(factory:Factory)<-[:USED_IN*0..1]-(requirements)
MATCH (requirements)<-[:PRODUCES*0..1]-(factory2)<-[:USED_IN*0..1]-(requirements2)
MATCH (requirements2)<-[:PRODUCES*0..1]-(factory3)<-[:USED_IN*0..1]-(requirements3)
RETURN targetGood, factory, requirements, factory2, requirements2, factory3, requirements3
输出
如果对答案很重要,请使用 neo4j 4.0.0
非常感谢
你可以在本地密码中做这样的事情。从完成的好节点开始,查找从该节点通过 PRODUCES|USED_IN
关系类型返回到没有入站 PRODUCES|USED_IN
关系类型的原始节点的所有路径。
MATCH path=(targetGood:Good {name: 'Fuel'})<-[:PRODUCES|USED_IN*..10]-(origin)
WHERE NOT (origin)<-[:PRODUCES|USED_IN]-()
RETURN path
我是 neo4j 和 cypher 的新手,正在研究如何 model/query 我的数据。
我有一套商品可以给工厂in/produced使用。 我将其建模为:
(:Factory)-[:PRODUCES]->(:Good)
(:Good)-[:USED_IN]->(:Factory)
我想找到创建特定目标商品所需的所有工厂和商品。
我可以用我目前对数据建模的方式来做到这一点吗? 如果您对以不同方式接近模型有任何建议,请告诉我!
我写了一个示例查询和结果来展示这种情况。 查询只能匹配 2 级深度的要求,我正在寻找可以匹配任意级别深度的东西,而不是像这样硬编码:)
MATCH (targetGood:Good) WHERE targetGood.name = "Fuel"
MATCH (targetGood)<-[:PRODUCES]-(factory:Factory)<-[:USED_IN*0..1]-(requirements)
MATCH (requirements)<-[:PRODUCES*0..1]-(factory2)<-[:USED_IN*0..1]-(requirements2)
MATCH (requirements2)<-[:PRODUCES*0..1]-(factory3)<-[:USED_IN*0..1]-(requirements3)
RETURN targetGood, factory, requirements, factory2, requirements2, factory3, requirements3
输出
如果对答案很重要,请使用 neo4j 4.0.0
非常感谢
你可以在本地密码中做这样的事情。从完成的好节点开始,查找从该节点通过 PRODUCES|USED_IN
关系类型返回到没有入站 PRODUCES|USED_IN
关系类型的原始节点的所有路径。
MATCH path=(targetGood:Good {name: 'Fuel'})<-[:PRODUCES|USED_IN*..10]-(origin)
WHERE NOT (origin)<-[:PRODUCES|USED_IN]-()
RETURN path