查询具有多个关系的路径中的折叠节点

问题描述 投票:0回答:1

在我的数据库中,项目节点之间的连接是通过三向节点连接完成的,如下图突出显示的那样。我选择这种方式是因为我认为没有办法可以建立三向箭头或关系。

不管怎样,我不认为这个建模本身有问题。但我想以放弃

CREATED_BY
关系并将连接路径折叠为简单关系的方式查询该图。我如何在 Neo4j 中使用 Cypher 来做到这一点?

我知道有

apoc.refactor.collapseNode
过程,但是,据我所知,它实际上会改变数据库?有没有办法仅用作查询?更不用说,就我而言,我将不得不以某种方式忽略折叠节点上的其他关系。

这是如何重现我所拥有的内容的示例:

// Users

// #1
CREATE (:User{name: "philippe_fanaro"});
CREATE (:User{name: "john_doe"});

// Items

// #1
MATCH  (u:User{name: "john_doe"})
CREATE (u)-[:CREATED]->(:Item{title: "Designing Data-Intensive Applications"});

// #2
MATCH  (u:User{name: "philippe_fanaro"})
CREATE (u)-[:CREATED]->(:Item{title: "System Design Interview – An insider's guide"});

// Connections

// #1
MATCH  (i1:Item), (i2:Item), (u:User{name: "philippe_fanaro"})
WHERE  i1.title CONTAINS "Designing"
  AND  i2.title CONTAINS "System"
CREATE (i1)- [:CONNECTION_ORIGIN]
           ->(c:Connection{title: "Relation"})
           - [:CONNECTION_DESTINATION]->(i2),
       (c)-[:CONNECTED_BY]->(u);
neo4j cypher
1个回答
0
投票

不确定您到底要查询什么以及想要结果是什么。但是,如果您想做类似于

apoc.refactor.collapseNode()
的操作,但作为虚拟路径而不是修改图形,那么也许这样的操作可以工作(此查询基于您在上面的示例中与 John Doe 和 Philippe 创建的节点和关系) Fanaro 并创建了一条从“设计”书到“系统”书的路径,具有名为“:CONNECTION”的虚拟关系)?

MATCH (n1)-[:CONNECTION_ORIGIN]->(r)-[:CONNECTION_DESTINATION]->(n2)
WITH n1, apoc.create.vRelationship(n1, "CONNECTION", {}, n2) AS rel
RETURN apoc.path.create(n1, [rel])
© www.soinside.com 2019 - 2024. All rights reserved.