我是neo4j和cypher的新手,正在研究如何建模/查询我的数据。
我有一套可以在工厂使用/生产的商品。我已经这样建模:
(: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