我如何在Neo4j的表中自引用?

时间:2019-04-03 16:34:05

标签: neo4j cypher graphql

我在Neo4j中加载了一些表格。我已经看过一些教程,并提出了这个密码查询。

MATCH (n:car_detail)
RETURN COUNT(DISTINCT n.model_year), n.model, n.maker_name
ORDER BY COUNT(DISTINCT n.model_year) desc

此查询给了我所有继续或停产的汽车。逻辑被终止,而更高的逻辑则继续。

我的桌子car_detail上有不同年份生产的汽车。我想例如说一段感情 “ Audi A4 2011”-(:续)->“ Audi A4 2015”-(:续)->“ Audi A4 2016”

2 个答案:

答案 0 :(得分:1)

因此,听起来您想匹配汽车的模型和制造商(按模型年份的升序排序),并在这些节点之间创建关系。

我们可以使用APOC Procedures作为通过有序节点和收集节点创建链接列表的快捷方式,您将需要安装它(使用与Neo4j版本相同的适当版本)以利用此优势。功能,因为纯密码方法很难看。

查询看起来像这样:

MATCH (n:car_detail)
WITH n
ORDER BY n.model_year
WITH collect(n) as cars, n.model as model, n.maker_name as maker
WHERE size(cars) > 1
CALL apoc.nodes.link(cars, 'CONTINUED')
RETURN cars

这里的关键是,在订购节点之后,我们将根据模型和制造商来聚合节点,这些节点将作为您的分组关键字(当进行聚合时,非聚合变量成为聚合的分组关键字)。这意味着您订购的汽车将按品牌和型号进行分组,因此剩下的就是使用APOC创建链接列表中节点的关系。

答案 1 :(得分:0)

您只需找到两辆具有MATCH的汽车,然后将它们连接起来即可:

例如

MATCH (c1:car_detail) 
where c1.model = 'Audi A4 2011' 
MATCH (c2:car_detail) 
where c2.model = 'Audi A4 2015' 
CREATE (c1)-[:CONTIUED]->(c2);