qq_41457701 2023-02-21 10:18 采纳率: 30%
浏览 66
已结题

neo4j如何查询一个有向图中与某结点相距为3的所有节点

查询并返回所有结点以及它们之间的路径,能不能返回成如下格式的:1->2->3->4(1为已知结点),补充一下:我的图中会有环路,应怎么避免结果路径中包含重复的结点

  • 写回答

3条回答 默认 最新

  • CodeBytes 2023-02-21 10:22
    关注

    该回答引用ChatGPT

    可以使用Cypher查询语言查询并返回所有节点之间的路径,并将它们表示为格式为 "1->2->3->4" 的字符串。假设已知的起始节点为 "1",则可以使用以下查询语句:

    
    MATCH path = (startNode)-[*]-(endNode)
    WHERE startNode.id = '1'
    RETURN reduce(pathString = '', n in nodes(path) | pathString + (case when pathString='' then '' else '->' end) + n.id) AS pathString
    
    

    上述查询语句会返回从节点 "1" 开始,经过所有可能路径到达的节点的路径,每个路径表示为一个字符串,以箭头符号 "->" 分隔节点的 id。

    具体地,MATCH path = (startNode)-[]-(endNode) 会查找所有起始节点为 "1" 的路径,其中 -[]- 表示任意长度的关系链,WHERE startNode.id = '1' 用于指定起始节点。reduce 函数会将路径中所有节点的 id 拼接成一个字符串,其中 (case when pathString='' then '' else '->' end) 用于在每个节点的 id 前添加箭头符号,n.id 用于获取当前节点的 id。最终返回的是一个名为 "pathString" 的字符串变量,表示从节点 "1" 到达该路径中的每个节点的完整路径。

    需要注意的是,如果图中存在环路,则此查询可能会进入死循环,因为它会尝试在环路中不断地前进。为了避免这种情况,可以使用 LIMIT 限制路径的最大长度。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月21日
  • 修改了问题 2月21日
  • 创建了问题 2月21日

悬赏问题

  • ¥15 C语言设计一个简单的自动换档程序
  • ¥15 关于logstash转发日志时发生的部分内容丢失问题
  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。