neo4j 给定密码关系,得到节点

gmol1639  于 2023-02-04  发布在  其他
关注(0)|答案(2)|浏览(164)

如果我查询

MATCH (:Label1 {prop1: "start node"}) -[relationships*1..10]-> ()
UNWIND relationships as relationship
RETURN DISTINCT relationship

如何获取每个已获取关系的节点,以获得格式为:

╒════════╤════════╤═══════╕
│"from"  │"type"  │"to"   │
╞════════╪════════╪═══════╡
├────────┼────────┼───────┤
└────────┴────────┴───────┘

是否存在type(r)这样的函数,但用于从关系中获取节点?

yk9xbfzb

yk9xbfzb1#

RomanMitasov和ray在上面给出了可行的答案。
我不认为他们完全理解你想要做什么,因为你基本上是以一种低效率的方式返回图中的每一个关系,我这么说是因为没有开始或结束位置,指定1 - 10的路径长度没有任何作用。
例如:
CREATE (r1:Temp)-[:TEMP_REL]->(r2:Temp)-[:TEMP_REL]->(r3:Temp)
现在我们有了一个包含3个临时节点的图表,其中有2个关系:从R1到R2,从R2到R3。
在这些节点上运行查询:

MATCH (:Temp)-[rels*1..10]->(:Temp)
UNWIND rels as rel
RETURN startNode(rel), type(rel), endNode(rel)

你会看到你得到了四行,这不是你想要的,因为只有两个不同的关系。
您可以将其修改为只返回不同的值,但仍然会过度搜索图表。
为了了解图中的关系以及它们之间的联系,我使用了如下查询:

MMATCH (n)-[r]->(m)
RETURN labels(n), type(r), labels(m), count(r)

当然,这样做的缺点是,如果您有一个非常大的图,它可能需要一段时间才能运行。
如果只想查看图形的结构:CALL db.schema.visualization()
最美好的祝愿和快乐的绘图!:)

0yg35tkg

0yg35tkg2#

是的,这样的功能确实存在!

  • startNode(r)以获取关系r的开始节点
  • endNode(r)以获取结束节点

下面是最后一个查询:

MATCH () -[relationships*1..10]-> ()
UNWIND relationships as r
RETURN startNode(r) as from, type(r) as type, endNode(r) as to

相关问题