Neo4j 密码-如何在重复的(a)-[:REL1]->;(b) -[:REL2]->;(c) 链子
我不熟悉neo4j和cypher,正在研究如何建模/查询我的数据 我有一套可供工厂使用/生产的商品。 我将其建模如下:Neo4j 密码-如何在重复的(a)-[:REL1]->;(b) -[:REL2]->;(c) 链子,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我不熟悉neo4j和cypher,正在研究如何建模/查询我的数据 我有一套可供工厂使用/生产的商品。 我将其建模如下: (:Factory)-[:PRODUCES]->(:Good) (:Good)-[:USED_IN]->(:Factory) 我想找到所有的工厂和货物需要创造一个具体的目标好 我可以用我目前建模数据的方式来做这件事吗? 如果您有任何关于以不同方式接近模型的建议,请让我知道 我编写了一个示例查询和结果来展示这种情况。 查询只能匹配2级深度的需求,我正在寻找一些可以匹
(:Factory)-[:PRODUCES]->(:Good)
(:Good)-[:USED_IN]->(:Factory)
我想找到所有的工厂和货物需要创造一个具体的目标好
我可以用我目前建模数据的方式来做这件事吗?
如果您有任何关于以不同方式接近模型的建议,请让我知道
我编写了一个示例查询和结果来展示这种情况。
查询只能匹配2级深度的需求,我正在寻找一些可以匹配任意级别深度的内容,而不是像这样硬编码:)
匹配(targetGood:Good),其中targetGood.name=“Fuel”
MATCH(targetGood)您可以在原生密码中执行类似操作。从完成的好节点开始,查找从该节点返回的所有路径,经过关系类型中的products | USED|u,到关系类型中没有入站products | USED|u的源节点
MATCH path=(targetGood:Good {name: 'Fuel'})<-[:PRODUCES|USED_IN*..10]-(origin)
WHERE NOT (origin)<-[:PRODUCES|USED_IN]-()
RETURN path
MATCH path=(targetGood:Good{name:'Fuel'})你好,Dave,谢谢你的回复!使用*10
查询对我不起作用,但它可以使用*
或*…10
例如:匹配路径=(targetGood:Good{name:'Fuel'})是的,当然,匆忙会浪费喝咖啡前的时间。我添加了.10
。它在浏览器中看起来会像相同的结果,但是如果您返回count(path)
当您删除WHERE NOT…
子句时,您将看到许多中间路径。哦,太好了!我现在明白了为什么不需要where。我有6对14条路径,有对没有。关于*…10
我还需要把它放在比赛线上。我也试着把where not改成以下,你觉得怎么样<代码>不在(原点)的地方请放心-匹配线是.10
的位置。我今天只是有一些焦点问题:)
MATCH path=(targetGood:Good {name: 'Fuel'})<-[:PRODUCES|USED_IN*..10]-(origin)
WHERE NOT (origin)<-[:PRODUCES|USED_IN]-()
RETURN path