如何查询节点之间的扩展路径与Cypher支架在Neo4j的?

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

我使用的Neo4j / Cypher支架来存储/检索基于图形模型的一些数据。

让我们假设以下模型:我有一组通过关系(类型= CONNECTED_TO)连接节点(类型=小孩)的。

C1 -[:CONNECTED_TO]-> C2 -[:CONNECTED_TO]-> C3 -[:CONNECTED_TO]-> C4

如果我想查询从C1到C4开始的一条路径不知道中间体:

MATCH p=
  (a:child {id:'c1Id'}) -[:CONNECTED_TO*0..]-(z:child {id:'c4Id'}) 
RETURN p

到现在为止还挺好。

现在假设每个孩子包含在父母和我要开始从父ID查询

P1 -[:CONTAINS]-> C1
P2 -[:CONTAINS]-> C2
P3 -[:CONTAINS]-> C3
P4 -[:CONTAINS]-> C4

查询是这样的:

MATCH p=
        (a:parent {id:'p1Id'})
        -[:CONTAINS]->
        (cStart:child)
        -[:CONNECTED_TO*0..]-
        (cEnd:child)
        <-[Contains]-
        (z:parent {id:'p4Id'})
RETURN p

这给了我很好的结果。以下路径:

P1 -[:CONTAINS]-> C1 -[:CONNECTED_TO]-> C2 -[:CONNECTED_TO]-> C3 -[:CONNECTED_TO]-> C4 <-[:CONTAINS]- P4

我想这样做的是使用子拓扑从P1查询到P4这条道路,但我也想检索包含中间体所有的父母。

我怎样才能提高我的最后一个暗号查询除了那回:

P2 -[:CONTAINS]-> C2
P3 -[:CONTAINS]-> C3

可能吗?也许我的模型设计并不适用于使用情况?在这种情况下,如何提高它来解决这个查询?

TX

graph neo4j cypher
1个回答
1
投票

您可以使用list comprehension结构:

MATCH p=
        (a:parent {id:'p1Id'})
        -[:CONTAINS]->
        (cStart:child)
        -[:CONNECTED_TO*0..]-
        (cEnd:child)
        <-[Contains]-
        (z:parent {id:'p4Id'})
RETURN p,
       [n IN nodes(p)[1..-1] | (n)<-[:CONTAINS]-(:parent)][0]
© www.soinside.com 2019 - 2024. All rights reserved.