带节点的neo4j路径查询

时间:2020-05-20 11:08:00

标签: neo4j cypher

Env-Neo4j 4.0企业 插件-GDS和Apoc

我在neo4j中有一个数据,如下所示-

CREATE (a:hotel {hotel_id:'A'}),
  (b:hotel {hotel_id:'B'}),
  (c:hotel {hotel_id:'C'}),
  (d:hotel {hotel_id:'D'}),
  (e:hotel {hotel_id:'E'}),
  (f:hotel {hotel_id:'F'}),
  (g:hotel {hotel_id:'G'}),
  (h:hotel {hotel_id:'H'}),
  (i:hotel {hotel_id:'I'}),
  (a)-[:HAS]->(b),
  (b)-[:HAS]->(c),
  (c)-[:HAS]->(d),
  (d)-[:HAS]->(e),
  (e)-[:HAS]->(f),
  (f)-[:HAS]->(g),
  (g)-[:HAS]->(h),
  (h)-[:HAS]->(i),
  (ap:hotel_loc {loc_id:'pp1A'}),
  (bp:hotel_loc {loc_id:'pp1B'}),
  (cp:hotel_loc {loc_id:'pp1C'}),
  (dp:hotel_loc {loc_id:'pp1D'}),
  (ep:hotel_loc {loc_id:'pp1E'}),
  (fp:hotel_loc {loc_id:'pp1F'}),
  (gp:hotel_loc {loc_id:'pp1G'}),
  (hp:hotel_loc {loc_id:'pp1H'}),
  (ip:hotel_loc {loc_id:'pp1I'}),
  (a)-[:HAS_JUNC]->(ap),
  (b)-[:HAS_JUNC]->(bp),
  (c)-[:HAS_JUNC]->(cp),
  (d)-[:HAS_JUNC]->(dp),
  (e)-[:HAS_JUNC]->(ep),
  (f)-[:HAS_JUNC]->(fp),
  (g)-[:HAS_JUNC]->(gp),
  (h)-[:HAS_JUNC]->(hp),
  (i)-[:HAS_JUNC]->(ip);

2个场景 1.从开始的所有节点的列表 给定一个loc_id(例如pp1F),我需要获取所有节点(酒店)及其关联的:HAS_JUNC节点。

f,pp1F
g,pp1G
h,pp1H
i,pp1I
  1. 所有列表的结尾。 给定loc_id(例如pp1C),我需要所有节点直到pp1C
a,pp1A
b,pp1B
c,pp1C

我尝试了此查询,但没有结果-

MATCH s=  (h1:hotel)-[:HAS_PROPERTY]->(start:hotel_propert {property_id:"pp1A"}),
e=  (h2:hotel)-[:HAS_PROPERTY]->(end:hotel_propert {property_id:"pp1C"})
WITH h1, h2, s,e match p=(h1)-[:HAS*]->(h2) RETURN s,p,e

我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  1. 要获取与特定HAS_JUNC有直接hotel_loc关系(假设其ID在loc_id variable-length relationship中的酒店):< / p>

    MATCH (a:hotel)-[:HAS_JUNC]->(ap)
    WHERE ap.loc_id = $loc_id
    RETURN ap, COLLECT(a) AS directly_connected_hotels
    
  2. 要获取所有与特定hotel_loc相关的酒店,

    MATCH (a:hotel)-[:HAS *0..]->()-[:HAS_JUNC]->(ap)
    WHERE ap.loc_id = $loc_id
    RETURN ap, COLLECT(a) AS connected_hotels
    

    here模式[:HAS *0..]中,0下界表示允许该模式匹配不存在HAS关系的路径。

相关问题